一种新的适合编写与人工智能有关的程序的语言的设想

来源:互联网 发布:上海工业软件高峰论坛 编辑:程序博客网 时间:2024/06/06 03:41

 

我是一个初学者,这篇文章只是自己的一点看法,希望大家看到后能给出自己的一些意见,谢谢!!

计算机语言的作用就是为了方便程序员描述物理的世界,不论是从开始的过程化编程语言,后来的结构化编程语言,还是现在流行的面向对象的编程语言,都是建构在对客观物理世界的描述之上。
       在过程化编程中,客观物理世界与现象被当作一个个过程的组合,编程员通过对具体过程的分析来构想程序具体的架构。
       在结构化编程之中,客观世界被分成了许多功能模块(即结构)的组合,各个结构之间通过事件联系起来,同时各个结构之间也有层次的关系,事件被描述成为各个功能模块相继发挥作用的过程,譬如说:要描述吃饭这个事件,我们就要知道吃饭是怎麽实现的,首先,拿筷子,然后夹菜,然后将菜送到嘴里,最后咀嚼,每一个过程又是一个功能模块,所以程序会用四个模块即函数:
Void 吃饭()
{
       拿筷子();
       夹菜();
       送菜入嘴();
       咀嚼();
}
同时吃饭这个事件也是一个功能模块,吃饭与拿筷子,夹菜,送菜入嘴,咀嚼之间就构成了总分之间的层次关系,根据这样的关系组织起来的程序架构就称为结构化的程序。
       而面向对象的编程语言则采用了另一种描述世界的方式,即世界是由一个个对象组成的,对象不仅仅是功能上的独立模块,而是基本完全自治的模块,在C++中,这便是类的概念,每个模块包含有功能部分和数据部分,譬如在C++中,每个类中包含有函数与数据,这样每一个模块可以独立的对外部世界进行反应,而不仅仅是实现某个功能,如鼓这个对象,它不仅仅只代表发出鼓声这个具体的功能,而是具有鼓的全部的性质,如打这个“鼓”,它会给出“发出鼓声”的反应,分析“鼓”的构成,可以得到“鼓皮”和“鼓身”的构成,这个“鼓”不需要依赖别的对象来实现鼓的性质,它完全是自治的。
Class 鼓
{
       功能:
              发出鼓声。//用鼓棒敲击鼓面
       组成:
              鼓皮
              鼓棒
              鼓面
}
 
       利用对象我们可以很自然的描述这个世界,如我们要描述一个人的一生的话,可以这样,创建人的对象,再创建一个具体的实例张三,程序就会变为:
一生()
{
       张三生出生了
       张三上学了
       张三结婚了
       张三有孩子了
       张三退休了
       张三死去了
}
这样的描述十分符合人的习惯。
       尽管面向对象的编程语言如此的方便,但是每个对象被创建之前编程员必须百分百的知道对象的所有的性质,至少要知道将会起作用的所有性质。如在创建人这个类的时候,编程员必须知道人会出生,会上学,会结婚,会生孩子,会退休,会死亡。但是实际上编程员不可能知道所要描述的对象的全部的性质,这就需要对象自己能够为自己添加性质,同时对象的性质不可能是一成不变的,每一次变化不可能都由编程员来进行维护,这也要求对象能够自己改变自己的性质。
       新的编程语言能够最大限度的模仿这个世界,这就需要我们更新对这个客观世界的描述方式,当我们在玩网络游戏时,我们把游戏里的世界称之为虚拟世界,而把我们所在的世界称之为现实世界,但是如果游戏里的人物也在玩游戏,那么那一个世界是什么世界呢,虚拟世界还是真实的世界,毫无疑问,大多数人都会认为那个世界也是一个虚拟的世界,那么,我们评判世界是真实的还是虚拟的标准是什么呢?
       我认为是这样的,其实网络中的虚拟世界和我们现实世界没有本质的区别,游戏的编制者为游戏中的世界编制的一套规则,每个游戏中的人物都必须遵守这个规则,如玩魔兽的时候游戏中的人物是不可能去上《电路理论》这门烂课的因为程序的编制员规定的活动中没有这项,但是现实中的人就不必遵守这个规则,我们还是可以上《电路理论》这门课。除此之外,程序的编制者没有规定过杨晴(我的室友)控制的人物从来不赢,这是这个世界在自我的演化过程中自发的形成的,因为魔兽的编制者不可能认得杨晴或是跟他有仇,特意为他加一条他永远不会赢的规则。
       而我们的现实世界也是一样的,虽然我们不承认造物主的存在,但是我们有什么理由来论证他确实是不存在的呢?实际上我们完全可以假定这样一个“造物主”,这用等效原理是很好解释的。“造物主”规定了我们的世界中存在着的一些基本的规则,如牛顿的三定律,热力学的三定律… 除此之外,“造物主”有没有规定具体的细节, “他”不可能事先就规定好了杨晴打游戏会输因为他打游戏完全是偶然事件,我们的世界中 发生的一系列的事件完全是自发形成的。
       由此我们可以看出,虚拟世界与现实世界没有天然的鸿沟,两者都是在一定的规着下自发的与受控制的事件的集合,如,在网络游戏中,人物的行为是由游戏的参与者控制的,游戏的参与者在这里扮演了一个“造物主”的角色,而游戏的结果是这个虚拟世界中的事件自发衍生出的结果;类似的,在现实的世界之中,物体的运动方式都是由各种定律很好描述的,但是有大部分结果都是在这个世界中自发衍生而出的。
由此,我们可以这样规定相应对象的组成结构:
对象
{
Public:
       受控部分;
       规则;
       未知部分。//这里可以自发的衍生出事件。
{
}
       Private:
基本的构成元素;
}
 
同时这样的计算机语言要允许程序是改变自身的行为和性质。传统的计算机语言不能改变自己的行为,也即:编译后的程序不能够改变自己的二进制代码,这使得编写与人工智能有关的语言的时候程序员陷入了对于过程具体实现过程的分析,从而不能专心的处理本质的问题。
解决的办法:
1 不再使用传统的编译,连接,运行的老的二进制代码的生成方式,而是转而边运行边编译,
2 程序创建出一个和需要修改的部分具有一样接口的部件,修改它,然后用它顶替原来的部件,最后销毁原来的部件。
针对第一种办法,新的语言及由其编写出的程序必须具有如下的性质:
它必须突破传统的强类型语言与弱类型语言的窠臼。
 
对已知事件,即存在有现成类型如int,char,class的基本或用户自定义的数据类型的数据,它必须能够进行类型检查以便查出更多的数据误用的错误,减轻编程员的负担
 
对未知的事件,即出现了无法进行类型匹配用户也尚未进行定义的数据类型,程序不应简单的报错,而是将其放入一个unknow数据库,留待以后的处理。
程序必须能够自我区分出输入“事件”或者“对象”中的数据或者方法。
针对第二种方法的语言,由其编写出的程序必须高度模块化的,并且同样,程序必须
够自我进行再次编译。
 
原创粉丝点击