跳转到主要内容

一个非常简单的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 (21.8 kB 查看散列)

上传于 源代码

构建分发

pyLisp_NG-2.0.0-py2.5.egg (53.0 kB 查看哈希)

上传于 源代码

pyLisp_NG-2.0.0-py2.4.egg (53.7 kB 查看哈希)

上传于 源代码

由以下支持