在使用sbcl-1.4.14的Windows框上,我使用
(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是未绑定的错误
如果我执行(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))),但我想你会同意这是一个糟糕的风格。
如何正确使用iterate?
注意:我见过the post关于非常类似的问题,但没有帮助。关于这个问题的帖子和文章不多。
发布于 2021-02-06 09:51:34
在尝试引用iterate包中的非限定符号之前,您需要说iterate。
在你的案子里发生了这样的事。
您已经将"ITERATE".
(iterate ...)的"CL-USER"包--的包,读者发现它需要找到或创建一个符号,其名称为"ITERATE",并且在"CL-USER" package.
CL-USER::ITERATE.
ITERATE:ITERATE,所以当它试图计算函数的参数时(它不存在,但它还不知道),所以从评估器得到了一个错误。实际上,在计算(for i ...)子表单中的第一个参数时,您所得到的错误是。
(use-package :iterate)让系统将"ITERATE"包添加到"CL-USER"的搜索列表中。
iterate是指现有的CL-USER::ITERATE还是新访问的ITERATE::ITERATE?(还有一些其他的冲突,probably).
"CL-USER"符号”,但我想你没有选择。
答案是:在尝试引用那些不合格的符号之前,使用要引用不合格符号的包。
(也是: Windows?你的反悔给我留下了深刻的印象。)
https://stackoverflow.com/questions/66069102
复制相似问题