一个非常简单的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。

<分区 id="references">

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/

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java流/下载文件,无需在Spring Boot中保留内存   kotlin/java是否有类似TryParse()的东西?   java Spring引导找不到用户类型的属性ID   java Spring 2到Spring 3的迁移:一个控制器用于多个视图   java包含多个程序包名为“安卓”的库。支持图样可提取'   java spring JPA是否支持自定义值框架?   java转义出基于文本字段的搜索栏   java AAPT:错误:未找到样式属性“安卓:attr/WindowsPlashCreenBackground”   java从文本文件中读取纬度和经度   java哪里可以找到如何使用排序的示例。顺序ignorecase(),其中nullhandling nulls last用于自定义Spring JPA如何提供查询   尝试使用Dialogflow上的Webhook动态给出响应时,java获取Webhook响应错误(206)   如何在java中替换匹配的字符串?   java模拟数学的最大价值。随机的   java Spring RestTemplate GET请求未给出正确响应   春爪哇。lang.IllegalArgumentException   java系统。load()永远不会发生   java剪辑循环不工作   java如何从maven构建中删除staxapi   java ThreadPoolExecutor的排队行为是否可以自定义,以更喜欢创建新线程而不是排队?