在编写 Common Lisp 代码时我真正怀念的一件事是访问 Python 库,包括标准库和第三方模块。 CLPython 提供了 Python 功能的有限子集,这阻止了大多数库的使用,因此这对我来说并不是很有用。我希望能够从 Common Lisp 调用 Python 代码,以便它在 CPython 或 PyPy 等 Python VM 中运行。
(编辑)我们现在有 py4cl:https://github.com/bendudson/py4cl https://github.com/bendudson/py4cl
Py4CL 是 Common Lisp 和 Python 之间的桥梁,它使 Common Lisp 能够与 Python 代码进行交互。它使用流与单独的 python 进程进行通信,这是 cl4py 采用的方法。这与被盗电池使用的 CFFI 方法不同,但目标相同。
下面是在 Lisp 程序中使用 Numpy 和 Scipy 的示例:
(ql:quickload :py4cl)
(py4cl:import-module "numpy" :as "np")
(py4cl:import-module "scipy.integrate" :as "integrate")
;; Integrate some ODEs
(defparameter *data*
(integrate:odeint
(lambda (y time)
(vector (aref y 1) ; dy[0]/dt = y[1]
(- (aref y 0)))) ; dy[1]/dt = -y[0]
#(1.0 0.0) ; Initial state
(np:linspace 0.0 (* 2 pi) 20))) ; Vector of times
你可能还喜欢异步进程 https://github.com/cxxxr/async-process/,它允许将代码发送到正在运行的 Python 进程。它用于莱姆编辑 https://github.com/cxxxr/lem.
使用示例:
CL-USER> (ql:quickload :async-process)
To load "async-process":
Load 1 ASDF system:
async-process
; Loading "async-process"
..................................................
[package async-process].
(:ASYNC-PROCESS)
CL-USER> (in-package async-process)
#<PACKAGE "ASYNC-PROCESS">
ASYNC-PROCESS> (create-process "python")
#.(SB-SYS:INT-SAP #X7FFFEC002830)
ASYNC-PROCESS> (defparameter p *)
#.(SB-SYS:INT-SAP #X7FFFEC002830)
ASYNC-PROCESS> (process-receive-output p)
"Python 2.7.13 (default, Nov 24 2017, 17:33:09)
[GCC 6.3.0 20170516] on linux2
Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.
>>> "
ASYNC-PROCESS> (process-send-input p "1+1
")
; No value
ASYNC-PROCESS> (process-receive-output p)
"1+1
2
>>> "
- https://github.com/CodyReichert/awesome-cl#python https://github.com/CodyReichert/awesome-cl#python
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)