2017-07-29 37 views
1

JSCL是Common Lisp(CL)的實現之一。如何從JSCL方法調用Common Lisp代碼

它涵蓋許多的CL特徵除了CLOS,格式等

它有其REPL其他CL實現。

我想知道如何從JS端調用CL代碼。

我想這樣做:

// set the CL codes as string 
var codes = "(defun f1(x) (+ x 1)) 
(f1 99)"; 

// call CL codes from JSCL 
JSCL.CL.call(codes); 
=> 100 

我想找到JSCL這樣的方法。

回答

2

您可以從JS控制檯調用Common Lisp函數和特殊窗體。 您只需在瀏覽器的控制檯上輸入以下代碼即可。

在下面的例子中,第一代碼定義了返回值加到1和第二代碼調用函數,並打印評價值的函數100

jscl.CL.PRINT.fvalue.call(this, jscl.internals.pv, jscl.CL.EVAL.fvalue.call(this, jscl.internals.pv, jscl.packages["COMMON-LISP"].symbols["READ-FROM-STRING"].fvalue.call(this, jscl.internals.pv, jscl.internals.js_to_lisp("(defun f1(x)(+ x 1))")))) 

jscl.CL.PRINT.fvalue.call(this, jscl.internals.pv, jscl.CL.EVAL.fvalue.call(this, jscl.internals.pv, jscl.packages["COMMON-LISP"].symbols["READ-FROM-STRING"].fvalue.call(this, jscl.internals.pv, jscl.internals.js_to_lisp("(f1 99)"))))