当我使用Quicklisp ( (ql:quickload "iterate") )加载"iterate“包时,它看起来加载得很好,但没有一个函数真正工作。当我进入(iterate:iter (for i from 0 to 10) (collect i))时,我得到一个错误消息"The variable i is unbound“和几个样式警告消息COLLECT和FOR是未定义的函数,FROM是一个未定义的变量。如果我尝试使用ITER或ITERATE而不是ITERATE:ITER,也会发生同样的事情。我使用的是SBCL。
发布于 2013-05-21 04:26:29
子句的“运算符”也位于iterate包中:
(iterate:iter (iterate:for i from 1 to 10) (iterate:collect i))Iterate是一个对use-package (或包定义中的:use )很方便的包。
发布于 2013-05-21 13:38:13
这不是一个有效的解决方案,但我很好奇自己也想找到一个,所以,也许有人也会帮助我:)
(defun old-package () (package-name *package*))
(defmacro i++ (&body body)
(let ((old (package-name *package*))
(new (package-name (find-package 'iterate))))
(in-package #.(package-name (find-package 'iterate)))
(prog1
`(unwind-protect
(progn
(in-package ,new)
(iter ,@body))
(in-package ,old))
(in-package #.(old-package)))))现在,这将不起作用,因为主体的符号是在旧的(例如cl-user)包中定义的,然后一旦您尝试在iterate包中使用它们,它就完全崩溃了。但一定有办法..。除了替换iterate包中可能存在的所有符号之外...
发布于 2019-07-11 05:17:03
使用以下命令将其定义为包的一部分:use可能是风格方面最好的方式,但我只是使用了
(use-package "ITERATE")而且它似乎工作得很好。
https://stackoverflow.com/questions/16653826
复制相似问题