引言


如今的编程技术暴露了一系列问题,而这些问题在很大程度上可以用人类自然语言编程法加以解决,特殊一点的则可以用珀加索斯法解决。



这些问题可以归结为四点:

1. 思想问题:为了适应某一种特殊编程语言的广泛模式,开发者不得不重新对其思维进行组织,因此他就不能直接表达其思想(如:C#程序中对类、属性、方法的事先考虑),降低了创造性。


2. 编程语言问题:编程思想不发生根本的改变,新发明的程序语言就会不得不反复的执行同样的算法。比如:原先在汇编语言里使用的冒泡排序算法,如今也用在Java语言中,不久的将来应该还会应用在别的新的语言中。


3. 阅读障碍:程序开发者不得不反复的阅读那些非母语写就的注释和文档。由于编写者的疏忽或者使用错误的表达方式,导致开发者的误解、错误及无效率。


4. 技术问题:在创造性方面,开发者不能全身心的投入到深入的研究中,而是在开发技术的一致性上花费了很多精力。例如,在正确的字符集、网络系统的详细日志或者数据库的格式等的挑选上浪费了很多时间。


解决方法和设想:

利用珀加索斯的人类自然语言编程可以很轻松的解决上述问题:1. 开发者可以不用费力的去改变其编程思维结构,而是直接用其母语进行表达。2. 当人类自然语言长时间保持不变时,用该语言编写的程序也会保持不变,为适应现有技术而重新开发程序的现象将不复存在,取而代之的将是编译器,它会自动的为该自然语言进行再开发,不需要开发者对其关注。3. 开发者可以用母语编写备注和文件集,其他的开发者则可以在自动翻译的基础上用自己的母语继续开发。如果程序都是由自然语言所编写,那么对于备注的需求就会减少。4. 珀加索斯只允许诸如Unicode字符形式的标准形式。

基于上述考虑,我们的工作就是通过“珀加索斯”编程系统的实现和使用大量的例子来证实下面三条假设: (Anwendungsbeispiele:)


1. 使用人类自然编程语言比使用传统语言在一般的应用上更有效率,可以得到更大的发展。尤其是在语境依存、相互关系和压缩短语的应用上。

2. 使用人类自然编程语言比使用传统语言可以更快的让人理解程序的编写。

3. 使用人类自然编程语言比使用传统语言可以让人更易学,更易掌握。


语言思想:

人类自然语言(如人类思想)的应用必须在珀加索斯中以某种形式进行表现。要达到这个目的,就会附加额外的思维标记过程。有了这些,我们思维中的简单思想(如:“红”和“声大”)和多层思想(如:“木材”和“桌子”)就会结合起来,重新组合出新的思想,使之可以描绘出我们的想法。如:这个桌子是棕色的(桌子,棕色),这种思想本身超越了特定的自然语言,它是由不同的自然语言进行表述的。尽管对个人来说这些思想都具有隐私性,但,对于整个人类来说大体上又都是一样的。因此,交流是非常重要的,这也是运用一般知识的计算机体系的基础。


自然语言的特性:

自然语言用下述三点进行区分,其目的是用现有的程序语言尽可能高效率的进行信息交换。1. 自然语言经常使用暗示指代,如“他”、“她”或者“最后”,另外还是用直接指代,如:“这个字符串列”或者使用部分语句关联关系指代,如:“是的,那是一定的”。2. 使用表达,如:使用句法上的表达“在列和栏中给出数学元素表”,又或者使用语义学的表达,如:“使人群由左向右穿过并转弯” 3. 对文章的依赖。如:“取出一个目录,把数字3放于末尾。取出一个目录的名字,把数字3放于末尾”,这样,由于前句不同,虽然后句使用了同样的文字,其意思却是完全不同的。

基础

上面所提到的Story-Telling-System(39)相关领域的一个调查研究还是值得关注的。如果存在或者即将存在相关工作,则其研究可以实现,该研究会有一定的成果并且不是我所涉及的领域。我一定会促进该项研究的合作。

    总体上来说,在专业领域成熟的人类自然语言程序只有很少的程式,以我们的角度来看,其主要原因是目前类似系统的发展还没有令人满意的或者说对于人类自然语言来说还没有绝对必要的技术发展支持,或者不存在自然语言的有效分列、足够的计算、存储能力的语意数据格式。


讨论


人类自然语言编程问题可能是由人类语言存在的语义相同但表述不同的情况而产生的。比如:”写出字符串”或者“给出字符串”,这种语义相同的表达却被赋予强大的限制,让人们无法理解。


此外,人类语言的表达存在多义的情况,这类问题就不能通过系统回问来解决。例如:“您说指的‘Sie’是值数量还是字符串?”。


有时,语言描述的正式记录要比事物对比更令人满意,尤其是在数学领域。人类自然语言的程序语言也应该额外的支持正式符号,目的是让使用者随时可以使用理想的编程技术,且可以自己决定什么时候使用正式符号,以及什么时候不用。

总结


最后,按照作者的思想总结一下:使这种编程模式成为可能的、适应于事物的语言已经出现,并且定位于最高点。这是从机械语言开始所走的很长一段路的结果,直至现在它引领了编程语言领域,使之更能确切的表达人类的思想。但,我们应该承认,在未来这种发展有可能停滞不前。人类自然语言编程在这里起到了决定性的作用,至少对于以后的研究会激发人们的兴趣。


珀加索斯第一次以理论为基础,具有实际可操作性的编程语言。通过这项工作,我们期望在软件技术和程序语言范畴内、在计算机语言学的基础上达到学术知识的可见性发展。

技术


“珀加索斯”读取一段由自然语言撰写的文字,然后生成可执行的程序,该程序可以将文章中描写的内容展示出来。


结构:

下图以一种隐喻的方式展示出了“珀加索斯”方法的结构体系:

思想语言表达的解决:

“珀加索斯”读取一段程序代码,然后产生与该代码相适应的表达。如例句:If the first element of the second row of the matrix is smaller than 3 then write“I can understand you”. 珀加索斯会产生如下的表达 :

(
  (
  ((be, action), normal mode, present tense, predicate),
  ((element, entity), (first, positive, property),
  ((row, entity), (second, positive, property),
  ((matrix, entity), single, entity reference,
  reference, normal phrase, phrase),
  single, entity reference, reference, normal phrase, phrase),
  single, entity reference, reference, normal phrase, phrase, subject),
  (smallness, comparative, property),
  ((three, entity), single, entity reference, reference,
  comparation phrase, phrase, object),
  statement clause, clause, first),
  (
  ((writing, action), normal mode, present tense, predicate),
  (direct personal reference, reference entity, subject),
  (("I can understand you!", character string symbol),
  symbol phrase, phrase, object),
  command clause, clause, second),
condition sentence, sentence)


一本字典中保存着必要的词典知识,其中包括单个单词的所有语法形式。如:对所描述语言中单词所对应的思想排列。下表就是一个条目的概况:

在程序代码段在思想语言中被表达之后,珀加索斯会尝试弄明白句子所要展现的思想。思想语言的表达将会被一步一步的由外向内进行分析,然后与程序内的语言库相校对:

该代码段所存储的命令与Java程序中的“If-then”所起到的作用是相同的。

在这种短时思考的帮助下,一个保存了7次记录的列示就会如参考“数”或者“他”这样解决出来。


程序语言设计

之后通过分解出的意思,在词典库中就会产生程序代码段。下面是小例子:


Take the matrix ([2, 2, 1], [1, 4, 3]).
Print it.
New line.
If the first element of the second row of the matrix is smaller than 3 then write "I can understand you!".


转换成代码就是下面的样子:


// Take the matrix ([2, 2, 1], [1, 4, 3]).
long[][] matrix74 = new long[2][3];
matrix74[0] = new long[]{2, 2, 1};
matrix74[1] = new long[]{1, 4, 3};

// Print it.
System.out.print("(");
for (int i7 = 0; i7 <= 1; i7++)
{
  System.out.print("[");
  for (int i8 = 0; i8 <= 2; i8++)
  {
  System.out.print(matrix74[i7][i8]);
  if (i8 < 2) System.out.print(", ");
  } 
  System.out.print("]");
  if (i7 < 1) System.out.print(", ");
}
System.out.print(")");

// New line.
System.out.println("");

// If the first element of the second row of the matrix is
// smaller than 3 then write "I can understand you!".
if (matrix74[1][0] < 3)
  System.out.println("I can understand you!");


如果矩阵第二行的第一个元素小于3,就会在屏幕上打印出“I can understand you!”。

珀加索斯只能用德语表达,目的是在目标语言中取得表达意思的一致,并用德语语法塑造出语法上完全正确的句子。


相关工作:


其实,以前就已经存在信息编程语言,只是这种语言的应用在很大程度上是由人类的语言所完成的,但这并不是人类自然语言的本意,因为它们不是在大量的人类语言的基础上创建的。也就是说,它们只是仅仅产生出一个人类自然语言形式上的补充式语言,如:COBOL, FORTRAN 和BASIC。新产生的还有:KlarDeutsch和AppleScript(010)。KlarDeutsch是该补充式的商业编程语言,主要应用于机器控制方面。AppleScript是一种笔记本语言,主要是为Apple公司的MacOS企业系统编写简单的程序。它的早期版本可以应用于多种语言。NaturlJava(045)也是一种语言,结合着人类语言,人们可以编写Java代码。Java结构在编程上存在一定的局限性,如某种命令样式“I would like to create a public method that is named XYZ”.


80年代也产生过单纯人类自然语言编程工具:NLC(054, 006)语言。这个英文版的人类自然语言程序实现于受限制的以字模运算为主的主机中,但它是第一个这种形式的程序。另一个比较新的有趣的语言是Metafor-Prototype(039),它依靠于Story-Telling-Systeme(034),使用一种“Pacman is a character who loves to run through a maze and eat dots”句型来阐述一个故事。伴随学术工程还有一个由个人创作的语言:Osmosian (049)。


珀加索斯不仅仅支持上面所列程序的所有特点,甚至还有更多:

理解

短期记忆

形成

表达

自然语言
- 德语
- 英语

编程语言
- Java

读

深层记忆

大脑