一个非常简单的lisp在python中的实现,非常适合需要类似lisp的功能的python项目。
pyLisp-NG的Python项目详细描述
Features
- 一种很小的lisp方言,很容易集成到其他python项目中。
- 包括一个交互式lisp解释器。
- 基因表达自省 编程。
Introduction
Pylisp Ng是Pylisp的直系后代 由于william annis希望为 用于监控工具MOM的简单专家系统。由于口齿不清 对python新闻组有兴趣,william发布了这个软件 向小组宣布了这件事。
几年后,evolver[4]和txevolver[5]项目需要 python中函数式编程语言的实现 python的ast太麻烦了。作者想发行, 跨多个远程处理和管理进化算法/程序 扭曲的服务器和操作部分程序的排列 如果可以对程序本身进行评估,则更容易与twisted集成 用python很容易反省。
pylisp-ng继承了pylisp的特性。例如, 布尔人是真是假,这不符合惯例 所有不假的东西都是真的(许多口齿不清的人都是这样)。事实上,所有 pylisp ng中的布尔值是基于模糊逻辑的,因此您可以做更复杂的事情。 奇怪的是,宏是Pylisp中的一类对象,对于 口齿不清[6]:
lisp> (setq foo 22) 22 lisp> ((macro (x) `(setq ,x (+ ,x 1))) foo) 23
Pylisp Ng和它的前任一样,并不打算成为一个成熟的公司, 强大的lisp实现。所有的进步都是由 有贡献的开发人员;现在,这是作为一个基因 编程工具。
Installation
Pylisp NG对安装工具很友好;您可以使用以下工具安装它:
$ easy_install pyLisp-NG
您还可以从launchpad获得完整的源代码:
$ bzr lp:pylisp-ng
对于感兴趣的用户来说,后一个选项受到极大的鼓励,因为 包含未包含在Ditribution tarballs中的额外文件(例如 测试运行程序和测试实用程序)。
Usage
要在完全签出时使用解释程序,请执行以下操作:
$ cd <branch directory> $ ./bin/pylisp-ng
如果您安装了easy_install,并且python脚本目录位于 您需要做的就是:
$ pylisp-ng
此时,您可以输入lisp表达式:
lisp> ((lambda (x) (* x x)) 2) 4 lisp>
您可以使用python中的s表达式代码:
>>> from pylispng import lisp >>> l = lisp.SExpression('((lambda (x) (* x x)) 2)') >>> str(l) '((lambda (x) (* x x)) 2)' >>> l.eval() 4
一次构建一个表达式一个符号,或者一次添加块:
>>> l = lisp.SExpression() >>> l.append('+') >>> l.append('3') >>> l.append('5') >>> l.append('(* 3 3)') >>> str(l) '(+ 3 5 (* 3 3))'
您可以检查s表达式的各种属性:
>>> l.eval() 17 >>> l.getDepth() 2 >>> len(l) 4 >>> l.getSize() 2
Known Bugs
目前还不知道。
TODO
- 支持测试.l文件
- 在doctests中支持lisp解释器测试?
- 将http://www.biostat.wisc.edu/~annis/creations/PyLisp/tests.txt添加到测试
- 将单片lisp.py文件拆分为单独的文件
- 用一个基于
在python解释器上
- 优雅地退出
- 命令历史记录
- 自动完成
- 添加对按索引获取表达式的支持(因此也支持切片)
- 添加对获取子表达式的支持
Changes
从Pylisp 1.17到2.0.0(Pylisp NG)
- 添加了对遗传编程有用的内省代码。
- 一些小错误修复和一些代码清理。
从Pylisp 0.0到1.17
似乎没有任何历史记录可以从中提取 以前的版本和1.17。
References
[1] | http://clipsrules.sourceforge.net/ |
[2] | http://mail.python.org/pipermail/python-list/2001-May/thread.html, search the page for “lisp” |
[3] | http://mail.python.org/pipermail/python-list/2001-May/084087.html |
[4] | https://launchpad.net/evolver |
[5] | https://launchpad.net/txevolver |
[6] | Taken from http://www.biostat.wisc.edu/~annis/creations/PyLisp/ |