gpt4 book ai didi

package - 在 Common Lisp 中使用 iterate 包的正确方法

转载 作者:行者123 更新时间:2023-12-04 22:34:20 25 4
gpt4 key购买 nike

在装有 sbcl-1.4.14 的 Windows XP 机器上,我使用以下命令安装了 ASDF

(load "C:\\Program Files\\clisp-2.49\\asdf\\asdf.lisp")
(require :asdf)
(push "C:\\Documents and Settings\\mayhem\\lisp\\iterate\\" asdf:*central-registry*)

关于SLIME

(require :iterate)
(iterate (for i from 1 to 5) (collect (* i i)))

给出变量 I 未绑定(bind)错误

如果我执行(in-package :iterate),上面的代码可以正常工作,但这次是熟悉的函数,例如exit以及我在中定义的其他函数.sbclrc 停止工作,例如,它们会给出 The function ITERATE::EXIT is undefined 类型的错误。

如果我执行(use-package :iterate),则会给出[Condition of type NAME-CONFLICT]错误。

所以我开始像这样使用这个包:(iterate:iterate (iterate:for i from 1 to 5) (iterate:collect (* i i)))但我想你会同意这是一种糟糕的风格。

如何正确使用迭代

注意:我见过the post关于非常相似的问题,但没有帮助。关于这个特定问题的帖子或文章并不多。

最佳答案

在尝试引用 iterate 包中的不合格符号之前,您需要先说 (use-package :iterate)

您的情况是这样的。

  1. 您已将iterate系统加载到正在运行的Lisp中,创建了一个名为“ITERATE”的包。
  2. “CL-USER”包中,您输入了(iterate ...),并且读者已经计算出它需要查找或创建一个名称为“ITERATE”的符号,可在“CL-USER”包中访问。
  3. 没有这样的符号,因此它创建一个新符号,CL-USER::ITERATE
  4. 这不是ITERATE:ITERATE,因此当评估器尝试评估函数的参数时,您会收到错误(该函数不存在,但它还不知道) 。事实上,您遇到的错误是在评估 (for i ...) 子表单中的第一个参数时出现的。
  5. 现在您说 (use-package :iterate) 告诉系统将 "ITERATE" 包添加到 "CL-USER" 的搜索列表。
  6. 现在存在冲突:iterate 应该引用现有的 CL-USER::ITERATE 还是新可访问的 ITERATE::ITERATE ? (可能还存在一些其他冲突)。
  7. 因此系统发出错误信号,应该有一些有用的方法可以继续处理,其中之一可能是“取消所有冲突的“CL-USER”符号”,但您没有我想,不要选择这个选项。
  8. 所以现在一切都乱了。

答案是:在尝试引用那些不合格的符号之前,使用您想要引用不合格符号的包。

(还有:Windows XP?你的复古风格给我留下了深刻的印象。)

关于package - 在 Common Lisp 中使用 iterate 包的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66069102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com