2009-12-08 3 views
84

Может ли кто-нибудь, хорошо разбирающийся в lisp, объяснить мне эту шутку? Я читал на языках функционального программирования и знаю, что CAR/CDR означает содержание регистра адресов/декретов, но я до сих пор не понимаю юмора.Что означает «мой другой автомобиль - это cdr»?

+10

начать немного «обдумывать», а затем вы поймете. хахаха. это лучше, чем наклейка с бампером, в которой говорится, что «этот программист останавливается во всех сборках мусора». – gonzobrains

+8

Примерно через полчаса после того, как этот вопрос был связан с https://news.ycombinator.com/item?id=14416846, он был приостановлен. Это вопрос 8 лет. Раздражающе, я не могу возражать против статуса удержания, но мне не нравится, что теперь он держит его на месте *. –

+0

@ i336_ за [мета обсуждение] (https://meta.stackoverflow.com/questions/250060/should-i-flag-old-questions-that-ought-to-be-closed), он закрыт для предотвращения новые ответы от блокировки очереди просмотра. – Andrew

ответ

123

В Lisp элемент связанного списка называется CONS. Это структура данных с двумя элементами, называемая CAR и CDR по историческим причинам. (Некоторые программисты Common Lisp предпочитают ссылаться на них с помощью функций FIRST и REST, в то время как другие, такие как CAR и CDR, потому что они хорошо согласуются с предварительно подобранными версиями, такими как (CADR x) ≡ (CARR x)).

Шутка - это пародия на наклейки с бампером, которые вы иногда видите на избитых старых машинах: «Мой другой автомобиль - это Porsche/BMW и т. Д.»

Мой response этой шутки всегда был «Мой другой автомобиль - это CADR. CDR не CAR на всех.»

+25

+1 за обычный ответ. :) – Kobi

+1

очень приятно, но не так. Не после '(rplacd a (car a))' это явно не будет. :) Common LISP - это не Haskell. Но спасибо за объяснение. +1. –

+0

@WillNess Common Lisp также не является общим LISP. –

13

// Из схемы
Схема имеет очень мало структур данных, один из которых является кортежем: '(first . second). В этом случае car является первым элементом, а cdr - вторым. Эта конструкция может быть расширена для создания списков, деревьев и других структур.
Шутка не очень забавная.

+0

О человек ... Если бы я увидел наклейку с бампером с этой шуткой, я бы полностью поцарапал слово «первичный» в стороне с помощью ключа. – Josh

+2

+1, шутка не очень забавная: P – Russell

+1

Не будет ли кортеж быть «(первым, вторым)? – Ken

32

Да, определенно Компьютерщик шутка.

имена приходят от IBM 704, но это не шутка.

Шутка (плохая) каламбура «мой другой автомобиль - это ___». Но в шутке речь идет о рекурсии.

Когда вы выполняете цикл/манипулируете/выбираете/вызываете/больше в lisp, вы используете комбинацию автомобиля (первый элемент в списке) и cdr (остальная часть списка), чтобы жонглировать функциями.

Итак, у вас есть машина, но ваш другой автомобиль - это ваш cdr, потому что вы всегда можете получить автомобиль из cdr, так как cdr всегда (в рекурсии) больше элементов. Возьми? Еще смеяться?

Вам, вероятно, придется изучить lisp, чтобы на самом деле посмеиваться, или нет. Конечно, к тому времени вы, вероятно, посмеиваетесь беспорядочно без видимых причин, потому что:

Lisp делает вас зацикленным.

+2

И с вашим последним вздохом началась другая игра. – zxq9

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