Mapcar和Lambda,LISP中未声明的变量错误

时间:2018-09-17 21:30:54

标签: lambda common-lisp

我试图摆脱在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.")

1 个答案:

答案 0 :(得分:3)

要使用mapcar,您必须有一个要映射的列表。看来您想遍历*corners*的元素。

(mapcar #'(lambda (c) (member *opponent* (nth c board)))
        *corners*)

但是,与第二个代码等效,您不应在循环内调用member,而应在映射结果上调用它:

(member *opponent*
        (mapcar #'(lambda (c) (nth c board)) *corners*))