On this page:
2.1 下载安装
2.2 仓颉字体和输入法
2.3 Emacs编辑器的语法高亮
2.4 运行代码
2.4.1 通过终端
2.4.2 通过文件
2.5 贡献翻译
2.6 名语言一览
2.6.1 白马非马
2.6.2 三年一班点名册
2.6.3 GGFSM
8.12

2 准备🔗

2.1 下载安装🔗

  1. 到Racket的官方网站下载安装Racket。

  2. 在终端中执行以下任意一条命令来安装名语言扩展包:
      raco pkg install "https://github.com/yanyingwang/ming.git"
      raco pkg install ming

2.2 仓颉字体和输入法🔗

因为名语言使用了很多新造字和古活字(古已有之但今不常用):
  1. 需要安装仓颉字体用以显示之;

  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。然后例如,可以有以下输入输出:
> (require ming)
> ( 某物 (􏿴 "苹果" "香蕉" "梨"))
> ( 某物)

'("苹果" "香蕉" "梨")

> ( ( 某物))

"苹果"

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")

此时,我们已经可以使用(require (mingize racket/list))来使用我们上面的翻译了。但如欲使用(require ming/racket/list),则还需创建如下文件:

"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