Mapcar и Lambda, необъявленная переменная ошибка в LISP - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь освоить использование mapcar и lambda в LISP.Ниже у меня есть нерабочая строка кода, в которой я пытаюсь их использовать.Я получаю сообщение об ошибке, что 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 голосов
/ 18 сентября 2018

Чтобы использовать mapcar, вы должны иметь список для отображения.Похоже, вы хотите перебрать элементы *corners*.

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

Но чтобы быть эквивалентным второму коду, вы не должны вызывать member внутри цикла, он должен вызыватьсяРезультат отображения:

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