CHICKEN for Emacs Lisp programmers

http://wiki.call-cc.org/chicken-for-emacs-lisp-programmers

站在 Emacs Lisp 用户的角度介绍 Chicken Scheme。

自己会一些 Emacs Lisp 和一点 C 后想试试别的 Lisp 系语言,看起来 Common Lisp 比较复杂,Racket 比较学术,先试试看 Chicken。

除了 Emacs Lisp 外,大家有在用其它的 Lisp 系语言吗?

1 个赞

PicoLisp: 类似 NewLisp 的简洁 Lisp 实现,都能直接调用 C 函数库和 Java。与后者着主要的区别是 PicoLisp 仍然使用基于 Cons Cell 的列表数据结构,而 NewLisp 则只保留了列表的形式,并不具备 Cons Cell 这一 Lisp 主要特性。

1 个赞

Mit Scheme, 但是不是日常用,只是在看SICP的时候用到,但是我一直搞不懂,为什么Scheme用那么多的实现,每个实现都算是一个变种么,据说chez-Scheme 很强

Scheme 和 Common Lisp 和 C 一样只是个标准,不过是个宽松得多的标准。有的人要在嵌入式环境用,有的人要在 JVM 环境用,有的人要网络功能,有的人想要有 Unix 管道支持,有的人想能直接调用动态库,所以会有很多实现满足需求。

Racket 的后端是 Chez。

Lisp 语言几乎都可以相互实现,比如 Emacs Lisp 实现了大部分 Common Lisp 标准,Guile 用 Scheme 基本实现了 Emacs Lisp,有人用 SBCL 汇编直接在 CPU 上运行的 Lisp 方言,有人用 Racket 来写自己特化的 Scheme 语言解释器。谁说 Lisp 不能自举,一定要靠 C/C++ 的?连 Lisp 解释器/编译器都是递归的。

很有喜感的一句话

本来不喜感,你的引用很喜感

这页wiki里讲pattern matching的这篇还不错

1 个赞

貌似 Chicken 的正则表达式不支持中文:

打算再试试 Gauche Scheme,它有原生的 UTF-8 支持(作者也是日本人)


Update 1:Gauche 还有 Info 格式的文档

之前曾试过基于 Scheme 的 scsh,但是因為作为 shell 缺乏交互性(readline,completion 等)而覚得其不如 NewLisp。 這几天在折騰 ZFS 的時候了解到了 initramfs,这是用于启動時运行不能编入內核的模組以挂载根文件系統的微型环境,以一个可执行文件為入口,本想用 NL 写这个脚本,但 NL 的 shell 功能是依賴于外部 sh 的,而這個脚本需要调用多个命令。因而想到了 scsh,然後我被它震驚到了:不但有完整的管道重定向功能,还能直接用 POSIX System Call。可以說功能远超 normal Shell 了。

和 NewLisp 對比:

;; Newlisp
(define arg "dir")

(exec (append "ls" arg))
;; => ("file1" "file2")

;; Scsh
(define arg 'dir)

(run/strings* (list 'lambda '() 'ls arg))
;; usually we use special forms like `(run/strings (ls /))'

https://www.ibm.com/developerworks/cn/linux/l-scheme/part1/index.html


我总覚得 Scheme 命名規則有點詭異。

1 个赞