我试图摆脱在LISP中使用mapcar和lambda的束缚。下面,我有一段无效的代码行,试图在其中使用它们。我收到一个错误,即c是一个未声明的自由变量。
我要去哪里错了?下面是失败的代码行。然后,我的第二个块是工作代码,尽管它比较笨重。
(mapcar #'(lambda (c) (member *opponent* (nth c board))) c)
(list (find-empty-position board *corners*)
"Squeeze Play! 3rd move.")
工作代码:
(member *opponent*
(list
(nth (first *corners*) board)
(nth (second *corners*) board)
(nth (third *corners*) board)
(nth (fourth *corners*) board)))
(list (find-empty-position board *corners*)
"Squeeze Play! 3rd move.")
答案 0 :(得分:3)
要使用mapcar
,您必须有一个要映射的列表。看来您想遍历*corners*
的元素。
(mapcar #'(lambda (c) (member *opponent* (nth c board)))
*corners*)
但是,与第二个代码等效,您不应在循环内调用member
,而应在映射结果上调用它:
(member *opponent*
(mapcar #'(lambda (c) (nth c board)) *corners*))