想想怎么用程序来写文章

来源:互联网 发布:supersocket 网络通信 编辑:程序博客网 时间:2024/05/01 01:58
想想怎么用程序来写文章

很多程序员都愿意用程序(或者代码片段)来表达某些文字或者自己的想法,这种行为,总结一下,其实就是用程序写文章。那是不是所有的文章都用程序来写呢?这个问题就比较复杂了。

程序的定义很简单,一般的程序设计语言的基本元素都是函数(在部分语言里还有子程序的概念,是同一个概念),函数的定义是有零个到多个输入,有零个(对于子程序)或者一个输出的若干有效指令,按照一定算法组合规则和语法规则而成的集合。

程序的定义是如此的简洁,所以,程序是明确的,有逻辑的。

而文章的定义我至今没有找到,因为我也不是学中文的,如果真要给出一个非常精确的定义是很困难的。首先,文体有很多种,甚至还有像诗歌一类的奇怪的文体,这对于用程序来表达文章的内容就很困难了(当然那,也不是绝对,比如perl语言就可以用来写诗),还有记叙文、议论文、说明文……用程序写小说那就更困难了……

当然,可以回归原始,从语言的角度去思考如何用有限的程序语言来书写更多的文章,当然,肯定不是全部,因为从数学的角度上说,程序符号属于文字的一个子集,也许它的组合同样是无限多的,但是肯定无法表达所有类型的文字的组合,就像数轴上有理数比无理数要少是一个道理,虽然他们都是无限多。

程序的特性可以归结为这么几类:

1、语法特性:支持的运算符、表达式、数据类型的种类等等,这些特性在文字中的表现其实是构词能力,比如C语言里有指针,可以翻译成指向一类的词,Java里有对象,可以翻译成所属关系、集合关系。

2、算法特性:这个特性有两部分,一部分是关键字的效果,通常一个正常的程序设计语言都会支持顺序执行、分支执行、循环执行这至少三种运行类型,这些是体现在关键字上,这些特性表现在文章的逻辑结构上,但对于短的文章,这种特性的表现不明显,并且,实际上大多数文章都是“顺序阅读”的;另一部分是程序本身的算法特性,比如是否支持递归,是否无限递归(比如伟大的lisp),以及解释性执行等,这些都在实际应用中不明确,所以很难说是怎么样的。

3、支持库的特性:这其实是对用程序写文章最有用的部分,任何完整的程序(除了汇编)都包含一整套扩展库,其中内置的事先写好的各种算法、系统接口等扩展功能,这些接口函数的名字都是英文,并且含义都很直接,比如kill是删除文件,malloc申请内存空间,如果要表达找个新女朋友,抛弃原来的女朋友就可以写成:

{
    Girlfriend MyGirlFriend;
    delete MyGirlFriend;
    MyGirlFriend = malloc(sizeof(Girlfriend));
}

用程序写文章是否要遵循语法规则呢?目前来看,其实没有太大必要,只要保证每句都是程序就可以,也不必一定要保证程序可执行,不可执行也OK,实际上,现在网上大多数程序表达的文字都是不可执行的。

从程序的特性可以看大概总结出来一个道理:用语法构词,用算法构造文章的大块逻辑结构,用支持库来进行某些特定的动作或者名词(代词)的翻译。

程序设计语言千差万别,所能表达的文章的类型和能力也差别很大。比如很少见到有人用汇编的,多数都是高级语言,为什么会这样呢?

本质上说:能力的差别是支持库的差别,支持库其实就是把特性词汇翻译成程序的能力,尤其是名词。

比如女朋友,在高级语言里,可以直接用Grilfriend,因为我可以说它就是一个class或者一个type,这是没有关系的,但是在汇编里就没有办法了。

于是,又回到的问题的起点,如何用程序去表达更多的文章?首先,要选一个算法支持足够多、语法特性足够多的语言,其次,要建立一个扩展库,可以自己建立,扩展库的本质就是一个词汇表,有了这个词汇表以后,想怎么写就可以怎么写了。

当然词汇表(扩展库)如果自己“定义”的太多,程序就看起来不那么“程序”了。

所以用一段看起来更符合程序的美学的程序文章,应该更尽可能的像程序,尽量用语言内已经定义好的库,如果实在没有,自己定义一些类型和方法,大块逻辑上尽量用语言内置的算法和逻辑,这样就看起来完美了。

最后说一句,那个换女朋友的程序可以这么写:

#include <love.h>

GirlFriend ChangeNewGirlFriend(GirlFriend MyGF)
{
    delete MyGF;

    try {
        MyGF = new GirlFriend;
    }
    cache(e)
    {
    MyGF = NULL;
    throw("Change failed, no new girl friend can get reason=%s", e.ErrString);
    }
    return MyGF;
}
0 0
原创粉丝点击