python的通用lisp

cl4p的Python项目详细描述


库cl4py(发音为clappy)允许python程序调用 通用lisp库。它的官方吉祥物是cl4py bird:

./cl4py.png

动机

你是一个python程序员,但是你想访问一些强大的 lisp的特性,例如在运行时编译代码?或者你想 用点awesome Lisp libraries?或者 您是一个lisp程序员,希望将您的工作展示给python 朋友。在所有这些情况下,cl4py是来帮助你的。

教程

您可以在python中启动任意数量的lisp子进程,如下所示:

>>>importcl4py>>>lisp=cl4py.Lisp()

当然,这需要安装一些lisp。如果没有,使用 像apt install sbclpacman -S sbclbrew install sbcl这样的东西来纠正这个缺陷。一旦你有了一个运行的lisp进程, 您可以在上面执行lisp代码:

>>>lisp.eval(('+',2,3))5>>>add=lisp.function('+')>>>add(1,2,3,4)10>>>div=lisp.function('/')>>>div(2,4)Fraction(1,2)

一些lisp数据结构在python中没有直接的等价物,大多数 值得注意的是,cons cells。cl4py模块提供了一个合适的cons类和 将列表conse转换为cl4py.cons的实例。

>>>lisp.eval(('CONS',1,2))Cons(1,2)>>>lst=lisp.eval(('CONS',1,('CONS',2,())))List(1,2)>>>lst.car1>>>lst.cdrList(2)# an abbreviation for Cons(2, ())# cl4py Conses are iterable!>>>list(lst)[1,2]>>>sum(lst)3

按名称查找单个lisp函数很快就会变得笨拙。 相反,通常最好将整个lisp包转换为python 模块,如下:

>>>cl=lisp.function('find-package')('CL')>>>cl.oddp(5)True>>>cl.cons(5,None)List(5)>>>cl.remove(5,[1,-5,2,7,5,9],key=cl.abs)[1,2,7,9]# Higher-order functions work, too!>>>cl.mapcar(cl.constantly(4),(1,2,3))List(4,4,4)# Of course, circular objects of all kinds are supported.>>>twos=cl.cons(2,2)>>>twos.cdr=twos>>>cl.mapcar(lisp.function('+'),(1,2,3,4),twos)List(3,4,5,6)

常见问题

为什么我的lisp子进程抱怨Package QL does not exist

默认情况下,cl4py使用sbcl --script启动lisp子进程。这个 意味着,lisp进程将忽略任何用户初始化文件, 包括quicklisp设置。但是,我们为 自动安装和加载quicklisp:quicklisp=True

>>>lisp=cl4py.Lisp(quicklisp=True);cl=lisp.function('find-package')('CL')>>>ql=cl.find_package('QL')>>>ql.quickload('YOUR-SYSTEM')

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

推荐PyPI第三方库


热门话题
使用SerializationUtils时java ClassNotFoundException。克隆()   java Cucumber+spring:如何通过测试触发SmartLifecycle事件?   java如何使ProGuard以简单的方式工作?   java JSP页面显示来自集合的日期   谷歌地图检查坐标是否位于JAVA中谷歌地图API的多边形中   java如何在终端中使用“tokens”打印令牌?   java获取编译错误:包com。威里奥。sdk不存在   java会使用JAXB或类似工具自动填充HATEAOS链接吗?   Javascript(GraalJS)与Java中未签名的右移>>>>   如何在Java代码中创建jdbc请求的Jmeter测试   java如何在CellList中添加或删除单个元素?   java Progressbar:如何创建原始对象的深度副本