JSCL是Common Lisp(CL)的实现之一。
它涵盖了除CLOS、format等之外的许多CL特性。
它的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中找到这样一种方法。
最佳答案
您可以从JS控制台调用公共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)"))))