我有:
(ps:ps (ps:var vertices (ps:lisp (cons 'list *VERTICES*))))其评估结果是:
"var vertices = [0.0, -200.0, 0, ... 0.4, 40];"这是正确的预期结果。
其中:
但是,当*VERTICES*很大时,计算结果会导致错误:
错误:太多的争论。在执行时:PARENSCRIPT::编译-特殊形式,进程侦听器(1)。
如何避免这个错误?
由于不知道文本在内部是如何工作的,这个问题很难解决。所以我试着改变列表传递给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;"没有一个是正确的预期输出。
将Lisp列表变量的值传递给parenscript以形成正确的javascript数组变量赋值语句的正确方法是什么?
发布于 2018-04-30 07:32:22
我用1000000件物品复制了这个。似乎家长抄本编译器(位于ps宏后面)首先将列表转换为表单(array 1 2 3 4 5 …)。这意味着array会获得100万个参数,这在源代码中是相当罕见的。
我建议你考虑一下你的设计。为什么要在源代码中创建这么大的向量?它应该放在一个单独的文件中,还是在运行时通过网络加载?
顺便说一句,您可以使用错误的调试器检查正在发生的事情。例如,在SLIME中,我将v按在compile-special-form的框架上,以查看相应的parenscript源代码。这显示了以下表达式:
(apply expression-impl (cdr form))这意味着表达将受制于call-arguments-limit。
https://stackoverflow.com/questions/50093458
复制相似问题