如何使用 parenscript 将 Lisp 列表设置为 JavaScript 变量的值?
How to set a Lisp list as the value of a JavaScript variable using parenscript?
我有:
(ps:ps (ps:var vertices (ps:lisp (cons 'list *VERTICES*))))
计算结果为:
"var vertices = [0.0, -200.0, 0, ... 0.4, 40];"
这是正确的预期结果。
其中:
ps
指parenscript (full documentation is here).
*VERTICES*
只是一个简单的列表
我的全局 Lisp 环境中的数字
但是,当*VERTICES*
很大时,计算会导致错误:
Error: Too many arguments.
While executing: PARENSCRIPT::COMPILE-SPECIAL-FORM, in process listener(1).
如何解决这个错误?
不知道parenscript内部是如何工作的,这个问题很难解决。所以我尝试更改列表传递给 ps.
的方式
以下是一些失败的尝试:
(ps:ps (ps:var vertices (ps:lisp (list *VERTICES*))))
=> "var vertices = 1(2, 3, 4, 0, 9, 0.1)();"
(ps:ps (ps:var vertices (ps:lisp *VERTICES*)))
=> "var vertices = 1(2, 3, 4, 0, 9, 0.1);"
(ps:ps (ps:var vertices *VERTICES*))
=> "var vertices = VERTICES;"
None 是正确的预期输出。
将 Lisp 列表变量的值传递给 parenscript 以形成正确的 javascript 数组变量赋值语句的正确方法是什么?
我能够用 1000000 个项目重现这个。似乎 parenscript 编译器(位于 ps
宏后面)首先将您的列表转换为 (array 1 2 3 4 5 …)
形式。这意味着 array
获得了一百万个参数,这对于源代码来说是相当不寻常的。
我建议您考虑一下您的设计。为什么要在源代码中创建这么大的向量?这应该放在一个单独的文件中,还是在运行时通过网络加载?
顺便说一句,您可以使用错误抛出的调试器来检查发生了什么。比如在SLIME中,我在compile-special-form
框上按了v
就可以看到对应的parenscript源码。这显示了以下表达式:
(apply expression-impl (cdr form))
这表明表达式将受制于 call-arguments-limit
.
我有:
(ps:ps (ps:var vertices (ps:lisp (cons 'list *VERTICES*))))
计算结果为:
"var vertices = [0.0, -200.0, 0, ... 0.4, 40];"
这是正确的预期结果。
其中:
ps
指parenscript (full documentation is here).*VERTICES*
只是一个简单的列表 我的全局 Lisp 环境中的数字
但是,当*VERTICES*
很大时,计算会导致错误:
Error: Too many arguments. While executing: PARENSCRIPT::COMPILE-SPECIAL-FORM, in process listener(1).
如何解决这个错误?
不知道parenscript内部是如何工作的,这个问题很难解决。所以我尝试更改列表传递给 ps.
的方式以下是一些失败的尝试:
(ps:ps (ps:var vertices (ps:lisp (list *VERTICES*))))
=> "var vertices = 1(2, 3, 4, 0, 9, 0.1)();"
(ps:ps (ps:var vertices (ps:lisp *VERTICES*)))
=> "var vertices = 1(2, 3, 4, 0, 9, 0.1);"
(ps:ps (ps:var vertices *VERTICES*))
=> "var vertices = VERTICES;"
None 是正确的预期输出。
将 Lisp 列表变量的值传递给 parenscript 以形成正确的 javascript 数组变量赋值语句的正确方法是什么?
我能够用 1000000 个项目重现这个。似乎 parenscript 编译器(位于 ps
宏后面)首先将您的列表转换为 (array 1 2 3 4 5 …)
形式。这意味着 array
获得了一百万个参数,这对于源代码来说是相当不寻常的。
我建议您考虑一下您的设计。为什么要在源代码中创建这么大的向量?这应该放在一个单独的文件中,还是在运行时通过网络加载?
顺便说一句,您可以使用错误抛出的调试器来检查发生了什么。比如在SLIME中,我在compile-special-form
框上按了v
就可以看到对应的parenscript源码。这显示了以下表达式:
(apply expression-impl (cdr form))
这表明表达式将受制于 call-arguments-limit
.