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

问题描述 投票:0回答:1

我试图在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.")
lambda common-lisp
1个回答
3
投票

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

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

但是要相当于第二个代码,你不应该在循环中调用member,它应该在映射的结果上调用:

(member *opponent*
        (mapcar #'(lambda (c) (nth c board)) *corners*))
© www.soinside.com 2019 - 2024. All rights reserved.