一个非常简单的Python中Lisp的实现,非常适合需要类似Lisp功能的Python项目。
项目描述
特性
一个小巧的Lisp方言,易于集成到其他Python项目中。
包括一个交互式Lisp解释器。
专门为遗传编程设计的表达式内省。
简介
pyLisp-NG是PyLisp的直接后裔,PyLisp是在William Annis想要为简单的专家系统Mom构建类似于CLIPS的[1]语法的过程中意外诞生的。由于Python新闻组中的Lisp兴趣[2],William发布了该软件并向该小组[3]宣布。
几年后,Evolver [4] 和 txEvolver [5] 项目需要在 Python 中实现一种函数式编程语言,因为检查 Python 的 AST 太麻烦了。作者希望能够在多个远程 Twisted 服务器上分发、处理和管理进化算法/程序,如果程序本身可以很容易地用 Python 评估和检查,那么操作部分程序的排列组合将更容易与 Twisted 集成。
pyLisp-NG 继承了 PyLisp 的独特特点。例如,布尔值是真和假,它不遵循“非假即为真”的惯例(这在许多 Lisp 中很常见)。实际上,pyLisp-NG 中的所有布尔值都基于模糊逻辑,因此你可以做更复杂的事情。宏在 PyLisp 中非常奇怪地是第一类对象,这对 Lisp 来说可能是新颖的 [6]
lisp> (setq foo 22) 22 lisp> ((macro (x) `(setq ,x (+ ,x 1))) foo) 23
pyLisp-NG 与其前辈一样,无意成为一款完整、健壮的 Lisp 实现。所有进展都完全由贡献开发者的兴趣所主导;目前,它严格用作遗传编程工具。
安装
pyLisp-NG 对 setuptools 友好;你可以使用以下命令安装它
$ easy_install pyLisp-NG
你也可以从 Launchpad 获取完整源代码
$ bzr lp:pylisp-ng
后一种选项非常适合感兴趣的用户,因为存储库包含在分发压缩包中未包含的额外文件(例如测试运行程序和测试工具)。
用法
要从完整检查中使用解释器,请执行以下操作
$ cd <分支目录> $ ./bin/pylisp-ng
如果你使用 easy_install 安装,并且你的 Python 脚本目录在 PATH 中,你只需这样做
$ pylisp-ng
此时,你将能够输入 Lisp 表达式
lisp> ((lambda (x) (* x x)) 2) 4 lisp>
你可以使用来自 Python 的 s-expression 代码
>>> 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-expression 的各种属性
>>> l.eval() 17 >>> l.getDepth() 2 >>> len(l) 4 >>> l.getSize() 2
已知问题
目前未知。
待办事项
支持测试 .l 文件
支持在 doctests 中测试 Lisp 解释器?
将 http://www.biostat.wisc.edu/~annis/creations/PyLisp/tests.txt 添加到测试中
将庞大的 lisp.py 文件拆分成单独的文件
用基于 Python 解释器的解释器替换 PyLisp 原来的脆弱解释器
优雅地退出
命令历史
自动补全
添加通过索引获取表达式(以及切片)的支持
添加获取子表达式的支持
变更
从 PyLisp 1.17 到 2.0.0 (pyLisp-NG)
添加了有用的遗传编程代码的检查功能。
一些小的错误修复和一些代码清理。
从 PyLisp 0.0 到 1.17
似乎没有历史记录可以从中提取代码更改,这些更改是在 1.17 和之前版本之间的。
参考
项目详情
下载文件
下载适用于您平台文件的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分发
构建分发
pyLisp-NG-2.0.0.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d14dee540c78d2b2a21ccfe09b1e9bab86cd060451545946555eb2ccbf9735d5 |
|
MD5 | 84141318cde6bf4e4f10ac4a920531be |
|
BLAKE2b-256 | a28800b7100011f7fde00ad590dc6c6e64aa936a0d9b7152f97597c96f105f2e |
pyLisp_NG-2.0.0-py2.5.egg 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 36a063149df76a87098a3eaf139546498eaaa3b26835d276ba2d4086de1408ff |
|
MD5 | 4b6fb5e6b5879dabac2e7fbd5da7236d |
|
BLAKE2b-256 | 6eb6e5ec8588b86f7b0cdb172bc5287f22cb0ed3acef52da9806921e7b063046 |
pyLisp_NG-2.0.0-py2.4.egg 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f58d8381d666166c8f05105efad48e13c8605a8fc17338fd42cece84b7d91c15 |
|
MD5 | e341de022b25121b49a68398a4f94c4c |
|
BLAKE2b-256 | 9115e2e3eba8a206b3db60c5a98daccfd0c30a14d0d9449bdc06ce24ce239c29 |