我试图在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.")
要使用mapcar
,您必须有一个列表来映射。看起来你想迭代*corners*
的元素。
(mapcar #'(lambda (c) (member *opponent* (nth c board)))
*corners*)
但是要相当于第二个代码,你不应该在循环中调用member
,它应该在映射的结果上调用:
(member *opponent*
(mapcar #'(lambda (c) (nth c board)) *corners*))