Есть ли простой способ использовать библиотеки Python из Common Lisp? - PullRequest
12 голосов
/ 03 марта 2011

Одна вещь, которую мне очень не хватает при написании кода Common Lisp, - это доступ к библиотекам Python, как к стандартной библиотеке, так и к сторонним модулям.CLPython предоставляет ограниченный набор функций Python, что исключает использование большинства библиотек, так что это не очень полезно для меня.Я хотел бы иметь возможность вызывать код Python из Common Lisp таким образом, чтобы он работал на виртуальной машине Python, такой как CPython или PyPy.

Ответы [ 5 ]

2 голосов
/ 13 июля 2015

Возможно, вы захотите попробовать burgled-battery , мост между Python и Lisp (привязки FFI и т. Д.).

Из описания "burgled-batteries обеспечивает разделение между Python (в частности, реализацией CPython для Python) и Common Lisp."

2 голосов
/ 06 апреля 2011

Одним из решений является python-on-lisp .Он должен быть ASDF-устанавливаемым.Он не обновлялся и не обновлялся в течение пары лет, поэтому может быть что-то более доступное.

2 голосов
/ 03 марта 2011

Я бы предложил написать интерфейс "exposer" для вашего кода, который принимает текст и записывает текст, чтобы вы могли вызывать его из командной строки.В идеале, с типичным STDIN |Подход STDOUT.

Я считаю, что обычно это лучший подход для неэффективных приложений.

1 голос
/ 21 февраля 2019

Вам может понравиться async-process , который позволяет отправлять код запущенному процессу Python.Используется в редакторе 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
>>> "
1 голос
/ 04 марта 2011

Я знаю, что это разные языки, но почему бы вам не попробовать Clojure и Jython :) :)

Возможно, вы найдете себя именно там, где вы хотите.

...