首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用parenscript将Lisp列表设置为JavaScript变量的值?

如何使用parenscript将Lisp列表设置为JavaScript变量的值?
EN

Stack Overflow用户
提问于 2018-04-30 03:11:19
回答 1查看 136关注 0票数 2

我有:

代码语言:javascript
复制
(ps:ps (ps:var vertices (ps:lisp (cons 'list *VERTICES*))))

其评估结果是:

代码语言:javascript
复制
"var vertices = [0.0, -200.0, 0, ... 0.4, 40];"

这是正确的预期结果。

其中:

  • ps指的是抄本 (完整文档是这里)。
  • *VERTICES*只是我的全局Lisp环境中简单的数字列表。

但是,当*VERTICES*很大时,计算结果会导致错误:

错误:太多的争论。在执行时:PARENSCRIPT::编译-特殊形式,进程侦听器(1)。

如何避免这个错误?

由于不知道文本在内部是如何工作的,这个问题很难解决。所以我试着改变列表传递给ps的方式。

以下是几次失败的尝试:

代码语言:javascript
复制
(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数组变量赋值语句的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-30 07:32:22

我用1000000件物品复制了这个。似乎家长抄本编译器(位于ps宏后面)首先将列表转换为表单(array 1 2 3 4 5 …)。这意味着array会获得100万个参数,这在源代码中是相当罕见的。

我建议你考虑一下你的设计。为什么要在源代码中创建这么大的向量?它应该放在一个单独的文件中,还是在运行时通过网络加载?

顺便说一句,您可以使用错误的调试器检查正在发生的事情。例如,在SLIME中,我将v按在compile-special-form的框架上,以查看相应的parenscript源代码。这显示了以下表达式:

代码语言:javascript
复制
(apply expression-impl (cdr form))

这意味着表达将受制于call-arguments-limit

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50093458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档