Что будет примером анафорического условного в Лиспе? - PullRequest
6 голосов
/ 13 октября 2010

Что будет примером анафорического условного выражения в Лиспе?Пожалуйста, объясните код также.

Ответы [ 2 ]

10 голосов
/ 13 октября 2010

У Пола Грэма На Лиспе есть глава о Анафорные макросы .

По сути, это сокращенный способ написания операторов, позволяющий избежать повторения кода.Например, сравните:

(let ((result (big-long-calculation)))
  (if result
      (foo result)))

и

(if (big-long-calculation)
    (foo it))

, где it - это специальное имя, которое относится к тому, что только что было вычислено в (big-long-calculation).

4 голосов
/ 13 октября 2010

Примером является Common Lisp LOOP:

(loop for item in list
      when (general-predicate item)
      collect it)

Переменная IT имеет значение тестового выражения. Это особенность ANSI Common Lisp LOOP.

Пример:

(loop for s in '("sin" "Sin" "SIN")
      when (find-symbol s)
      collect it)

1012 * возвращается *

 (SIN)

потому что только "SIN" является именем для существующего символа, здесь символ SIN. В Common Lisp имена символов по умолчанию имеют заглавные имена.

...