Использование списков с Common LISP - PullRequest
2 голосов
/ 09 марта 2011

Я только начинаю с LISP, как в, только что открыл книгу, я две страницы в нее. Я пытаюсь понять, что является и что не является приемлемым FN Call. Каждый раз, когда я пытаюсь выполнить

(1 2 3 4)

Я получаю недопустимую ошибку вызова fn То же самое касается

(cdr (1 2 3 4))
(first (1 2 3 4))
(a b c d)

Программы CL не могут возвращать списки? Как мне использовать эти функции или распечатать список? Я использую реализацию SLIME, если это имеет значение. LISP сильно отличается от всего, с чем я работал раньше, и я хочу быть уверен, что получаю его концептуально.

Ответы [ 2 ]

5 голосов
/ 09 марта 2011

Вам нужно заключать в кавычки списки, если вы используете их в качестве констант. В противном случае система попытается вызвать функцию 1 с аргументами 2 3 4, которая не будет работать (обратите внимание, что вызовы функций имеют тот же синтаксис, что и списки). Ваши примеры должны быть:

'(1 2 3 4)
(cdr '(1 2 3 4))
(first '(1 2 3 4))
'(a b c d)
0 голосов
/ 10 марта 2011

Hooo boy.

Посмотрите на Практический Общий Лисп от Сейбела.Он такой хороший парень, он выложил его в Интернете для свободного чтения.Это очень полезно.

Частью определения Lisp является следующее правило:

  • Когда виден список: Используя первый элемент списка, примените его к остальной частиlist.

Но подождите: как вы на самом деле вводите списки?Для этого есть две функции: QUOTE и LIST .

В качестве примера, давайте выведем список на экран на standard out :

(format *standard-output* "~a" '(1 2 3 4))

Для format, *standard-output* имеет псевдоним t (ну, по крайней мере, в SBCL!), Поэтому обычно мы видим (format t ....

...