8.12
2 准备
2.1 下载安装
- 在终端中执行以下任意一条命令来安装名语言扩展包:raco pkg install "https://github.com/yanyingwang/ming.git"raco pkg install ming
2.2 仓颉字体和输入法
因为名语言使用了很多新造字和古活字(古已有之但今不常用):
需要安装仓颉字体用以显示之;
需要安装中州韵(rime)输入法,加以使用键序郑码(asdfzma)用以输入之(也可实现与双拼、拼音混输,可见:rime_custom);
2.3 Emacs编辑器的语法高亮
git clone https://github.com/yanyingwang/racket-mode-for-ming之后,在emacs的配置文件中加入:
(use-package racket-mode :load-path "/your-clone-path/racket-mode-for-ming" )
2.4 运行代码
2.4.1 通过终端
在终端中执行racket命令来打开repl。然后例如,可以有以下输入输出:
2.4.2 通过文件
例如,可以在系统中创建一个如下内容的文件:
"file1.rkt"
#!/usr/bin/env racket #lang ming (名 某物 ( "苹果" "香蕉" "梨")) (示 某物) (示 (甲 某物))
赋予文件执行权限后运行此文件即可:
./file1.rkt
2.5 贡献翻译
目前名语言仅翻译了米、双和、句等相关的例程,大量如for/match/hash/dict/struct/class/syntax等重要内容都还有待翻译。
对Racket标准库的翻译,应根据Racket库的路径来创建相应翻译文件到mapping/目录中。
以racket/list库的翻译为例,代码文件的位置和内容应为:
对Racket的base库的翻译,应将翻译文件置于mapping/racket/base/*.rkt处(文件名任意)。
"mapping/racket/list.rkt"
#lang s-exp "../../private/mapping-lang.rkt" >>> first 甲 "第一个的意思,源自中国古代文字记序符号十天干。" >>> second 乙 >>> third 丙 >>> fourth 丁 >>> fifth 戊 ;; 此行共三个翻译 >>> index-of 索引 (elem "从中查出某个值的" (racket 引)) ;; “原因”可以为一个
翻译文件代码规则请见(part "mapping-lang")。
"racket/list.rkt"
#lang racket/base (require "../private/core.rkt") (provide-with-mingizily-require racket/list)
2.6 名语言一览
2.6.1 白马非马
以中国古代春秋战国时期,名家提出的辩题《白马非马》,代码可以演示为:
> (名 马 ( "白马" "黑马" "黄马")) ; 起一个名字马代表一个结构的数据集合,集合内容是白马、黑马和黄马。 > (名 白马 "白马") ; 起名白马是一个字符串数据,该字符串内容是白马二字。
> (丫 (同? 马 白马) ; 如果马和白马所代表的内容一样: (陈 (格 "~v是~v。" 白马 马)) ; 那么就转化整合变量名到字符串中并在屏幕上陈列出:白马所代表的内容是马所代表的内容。 (陈 (格 "~v非~v。" 白马 马)) ; 否则就转化整合变量名到字符串中并在屏幕上陈列出: 白马所代表的内容非马所代表的内容。) "白马"非'("白马" "黑马" "黄马")。
; 因为白马是字符串意义上的白马,而马是一个包含了“白马”“黑马”“黄马”的集合,故此两者不同,结果是“白马非马”。
2.6.2 三年一班点名册
三年一班点名册的简单查询示例:
> (名 三年一班点名册 ( "王小明" "李小花" "赵小红"))
> (丫 (同? "王小明" (阳 三年一班点名册)) (陈 "三年一班点名册上的第一个姓名是王小明。") (陈 "三年一班点名册上的第一个姓名不是王小明。")) 三年一班点名册上的第一个姓名是王小明。
> (肖 (阴之阳 三年一班点名册) [("王小明" "王小白") (行陈 "三年一班点名册上的第二个姓名是王小明或王小白。")] [("赵小红" "赵大红" "赵红") (行陈 "三年一班点名册上的第二个姓名是赵小红、赵大红或赵红。")] [夬 (行陈 "三年一班点名册上的第二个姓名是什么暂未可知。")]) 三年一班点名册上的第二个姓名是什么暂未可知。
> (require ming/racket/list)
> (当 [(同? "王小明" (甲 三年一班点名册)) (陈 "三年一班点名册上的第一个姓名是王小明。")] [(同? "赵小红" (甲 三年一班点名册)) (陈 "三年一班点名册上的第一个姓名是赵小红。")] [(同? "赵小红" (乙 三年一班点名册)) (陈 "三年一班点名册上的第二个姓名是赵小红。")] [夬 (行陈 "三年一班点名册上的第二个姓名是什么暂未可知。")]) 三年一班点名册上的第一个姓名是王小明。
p
2.6.3 GGFSM
GGFSM项目是一个基本上用名语言实现的项目,其中代码的大部分内容可以见到是用的汉字实现的,其代码有很大的参考价值。
https://github.com/yanyingwang/ggfsm