2016-02-23 3 views
0

У меня есть это выражение,Lisp список манипуляций проблема

(write (cdr (car' ('(p q) r)))) 

http://ideone.com/bkZv20

который дает ((P Q)) как выход. Я весь день царапаю голову и все еще не могу понять, как это работает.

Doing только car часть дает,

(write (car' ('(p q) r))) 

дает '(P Q).

Тогда, согласно мне (cdr '(P Q)), следует указать (Q) в качестве выходного сигнала.

Каков окончательный ответ, '(P Q) - мой вопрос.

+0

Что это тайна 'car'' функции вы, кажется, использует? Вы действительно хотите использовать '' 'для цитирования дважды? –

+0

Я получил такое выражение! Посмотрите на ссылку, – saruftw

+0

Я думаю, вы могли бы найти ответы на [Заменить элементы в вложенных кавычках добавлены новые элементы?] (Http://stackoverflow.com/questions/24370500/replace-elements-in-nested-quoted -lists-added-new-elements). –

ответ

6

У вас есть дополнительные цитаты (первый прилипла к car, но до сих пор разбирает правильно) там что вызывает цитируемую цитату, так, что вы, по сути есть это:

(write (cdr (car '((quote (p q)) r)))) 

Принимая car этого оставляет вас с только данными:

(quote (p q)) 

И снова принимая cdr этого приводит данные:

(p q) 

Как вы заметили. Если посмотреть на автомобиль автомобиля вместо с

(write (car (car '((quote (p q)) r)))) 

вы должны увидеть

quote 
сам

. Помните, что '(a b) и (quote (a b)) - это то же самое, и распечатка из того, что вы используете, может отображать любую форму.

Так что вы хотите сделать, это просто удалить лишнюю цитату, т.е .:

(write (cdr (car '((p q) r)))) 
+0

Но почему я получаю этот ответ? – saruftw

+0

Я отредактировал первый код, отрезанный немного, вы можете видеть, что происходит сейчас? –

+0

не могли бы вы сломать поток (результат на каждом шагу)? облегчит понимание. Благодарю . – saruftw

Смежные вопросы