我正在进行一个遗传编程的业余项目。
我设置了一个函数/宏,当在setq/setf形式中进行评估时,将生成一个列表,看起来类似于这样。
然后,通过函数/宏的策略性使用,它将被绑定到一个lambda函数
但是,我希望能够更加有效地进行操作,而不是手动分配变量,因此我编写了类似以下内容的代码:
然而,当我把它放在let形式中时,会得到“EVAL:trees has no value”的错误。我怀疑在LET中,与SETF相比,宏展开没有完全执行,但这对我来说毫无意义。
导致这个问题的原因是什么?
---编辑:我复制了我的代码并将整个文件放在pastebin中---
假设我决定setq不能满足我的需求,并编写一个简单的函数来完成它:
(defun generate-sample () (let ((twiggs (make-trees 2))) (let ((tree-bindings (bind-trees twiggs))) (let ((evaluated-trees (eval-fitness tree-bindings))) (list twiggs tree-bindings evaluated-trees)))))
这会产生一系列的...帮助文件错误消息(??!?)...和“eval:variable twiggs has no value”,源于SLIME检查上的bind-trees定义。
我相当确定我已经完全弄乱了我的宏。http://pastebin.org/673619
我设置了一个函数/宏,当在setq/setf形式中进行评估时,将生成一个列表,看起来类似于这样。
(setq trees (make-trees 2))
==> (+ x (abs x))
然后,通过函数/宏的策略性使用,它将被绑定到一个lambda函数
#<FUNCTION :LAMBDA (X) ... >
。但是,我希望能够更加有效地进行操作,而不是手动分配变量,因此我编写了类似以下内容的代码:
(setq sample
(let* ((trees (make-trees 2))
(tree-bindings (bind-trees trees))
(evaluated-trees (eval-fitness tree-bindings))))
(list (trees tree-bindings evaluated-trees)))
然而,当我把它放在let形式中时,会得到“EVAL:trees has no value”的错误。我怀疑在LET中,与SETF相比,宏展开没有完全执行,但这对我来说毫无意义。
导致这个问题的原因是什么?
---编辑:我复制了我的代码并将整个文件放在pastebin中---
假设我决定setq不能满足我的需求,并编写一个简单的函数来完成它:
(defun generate-sample () (let ((twiggs (make-trees 2))) (let ((tree-bindings (bind-trees twiggs))) (let ((evaluated-trees (eval-fitness tree-bindings))) (list twiggs tree-bindings evaluated-trees)))))
这会产生一系列的...帮助文件错误消息(??!?)...和“eval:variable twiggs has no value”,源于SLIME检查上的bind-trees定义。
我相当确定我已经完全弄乱了我的宏。http://pastebin.org/673619
setq
是怎么回事? - Kenlet
表单体内会发生什么?缩进也很误导,括号也不平衡。 - Svante