On this page:
2.1 中文化一角
2.1.1 make-list和build-list
2.1.1.1 原英文
2.1.1.2 中文化后
2.2 名语言一览
2.2.1 白马非马
2.2.2 三年一班点名册
8.6

2 初见

2.1 中文化一角

我在序的《如何改进LISP的难读性》一章节中,曾谈到说把LISP中文化是很有意义的,中文可以改进LISP的难读性并为其带来新的活力。本章节即是我结合之前所说,所实现的一部分名语言的代码。

2.1.1 make-list和build-list

我们以两个Racket标准库里面的例程(Procedures):make-listbuild-list为例来尝试阐述所说。

2.1.1.1 原英文

从他们的英文名字上,我们很容易得出这两个例程都是用来创建“list”的(名语言称之为“”)。

对于make-listbuild-list这两个例程的具体作用,从名字上我们仅仅能看出它是用来创建链的,并不能看出它的其它更具体的作用。

2.1.1.2 中文化后

中文化后,make-list复链,意为链内部的每个元素是重复的;build-list序链,意为链内部的元素是按照一定的顺序排列的。

当然你可以说,这其中的“第一”是因为这两个例程原本的英文名字起的不好。

但我们更加应该看到的是,这本质上反应的是一种文化上的差异:英文世界里是存在着一种把事情都简单化的趋向的,这是我认为这两个例程都采用了make-listbuild-list的根本原因,我们即使找出更加贴切的英文词汇来作为这两个例程的名字,但或许这些词汇在实际的实现上看起来都是不够直观的。

但对中文来讲就不一样了,中文的造词能力更强:支撑中文造词能力强的技术层原因是它的单字表意特性;非技术层原因是它所造出的词是更加容易被接收者所理解的(这可能和它字的表象特性有关)。

中文化后的示例:
> ( 'val 'val 'val)

'(val val val)

> (复链 3 'val)

'(val val val)

> ( 1 2 3 4 5)

'(1 2 3 4 5)

> (序链 5 加一)

'(1 2 3 4 5)

> (序链 5 ( (n) (复链 n 'val)))

'(() (val) (val val) (val val val) (val val val val))

2.2 名语言一览

2.2.1 白马非马

以中国古代春秋战国时期,名家提出的辩题《白马非马》,代码可以演示为:
> (  ( "白马" "黑马" "黄马"))
; 起一个名字代表一个链结构的数据集合,集合内容是白马黑马黄马
> ( 白马 "白马")
; 起名白马是一个字符串数据,该字符串内容是白马二字。
> ( (同?  白马)       ; 如果白马所代表的内容一样:
  ( ( "~v是~v。" 白马 ))      ; 那么就转化整合变量名到字符串中并在屏幕上陈列出:白马所代表的内容所代表的内容
  ( ( "~v非~v。" 白马 ))      ; 否则就转化整合变量名到字符串中并在屏幕上陈列出: 白马所代表的内容所代表的内容)

"白马"非'("白马" "黑马" "黄马")。

; 因为白马是字符串意义上的白马,而是一个包含了“白马”“黑马”“黄马”的集合,故此两者不同,结果是“白马非马”。

2.2.2 三年一班点名册

三年一班点名册的简单查询示例:
> ( 三年一班点名册
      ( "王小明" "李小花" "赵小红"))
> ( (同? "王小明" ( 三年一班点名册))
      ( "三年一班点名册上的第一个姓名是王小明。")
      ( "三年一班点名册上的第一个姓名不是王小明。"))

三年一班点名册上的第一个姓名是王小明。

> ( (阴之阳 三年一班点名册)
      [("王小明" "王小白") (行陈 "三年一班点名册上的第二个姓名是王小明或王小白。")]
      [("赵小红" "赵大红" "赵红") (行陈 "三年一班点名册上的第二个姓名是赵小红、赵大红或赵红。")]
      [否则 (行陈 "三年一班点名册上的第二个姓名是什么暂未可知。")])

三年一班点名册上的第二个姓名是什么暂未可知。

> ( ming/racket/list)
> ( [(同? "王小明" ( 三年一班点名册))
       ( "三年一班点名册上的第一个姓名是王小明。")]
      [(同? "赵小红" ( 三年一班点名册))
       ( "三年一班点名册上的第一个姓名是赵小红。")]
      [(同? "赵小红" ( 三年一班点名册))
       ( "三年一班点名册上的第二个姓名是赵小红。")]
      [否则 (行陈 "三年一班点名册上的第二个姓名是什么暂未可知。")])

三年一班点名册上的第一个姓名是王小明。