У вас есть мнемоника для запоминания значения автомобилей и CDR? - PullRequest
14 голосов
/ 20 августа 2009

Большая часть моего опыта с Лиспом исходит от Элиспа. Таким образом, я пишу на Лиспе только в отдельных случаях. К тому времени, когда я возвращаюсь к этому, я часто забываю разницу между car и cdr и должен ссылаться на документы, чтобы подтолкнуть мою память.

Какие умные мнемоники вы используете для запоминания различий между функциями Lisp, которые имеют корни именования, вытекающие из компьютерной архитектуры 1954 года (car, cdr, cadr, caar, cddr и т. Д.)?

Кроме того, почему так называемые псевдонимы first и rest не получили большей популярности в качестве идиоматических альтернатив для car и cdr?

Обновление : я знаю фактические определения car и cdr и как они должны произноситься. Только мнемоника, пожалуйста.

Полное раскрытие : Этот вопрос не полностью для меня. Это поможет другим новичкам в Лиспе преодолеть некоторые начальные препятствия.

Ответы [ 11 ]

13 голосов
/ 25 августа 2009

Из двух слов car и cdr , car - это то, что я слышал first .

11 голосов
/ 20 августа 2009

Это действительно неубедительно, но поскольку никто больше ничего не предложил ...

машина для меня это вещь, которая едет, поэтому она первая. cdr - камбуз; это приходит после.

Понимаете, я говорил вам, что это хромое.

9 голосов
/ 20 августа 2009

У меня нет мнемоник для запоминания car / cdr, хотя они в алфавитном порядке (a предшествует d, поэтому car равно first).

Насколько они держались (над вещами типа first и rest)? Большая часть, вероятно, просто импульс, а другая - это то, что вы уже написали. Вы можете легко написать для них композиционные функции:

(caadar ...) -> (car (car (cdr (car ...))))
3 голосов
/ 20 августа 2009

Они означают «Содержимое регистра адресов» и «Содержимое регистра декремента», термины, полученные из архитектуры машины IBM 704. Не то чтобы это вам очень помогло!

См. http://www.iwriteiam.nl/HaCAR_CDR.html

1 голос
/ 30 ноября 2013

Мнемоника, которую я использую:

АВТОМОБИЛЬ - Копировать альфа-позицию и возврат

CDR - Копировать Dendrite (часть дерева - без рута) и Return

Я снова начинаю пробовать Лисп, но, надеюсь, это подходит.

Я склонен думать о начале списка как о альфе или корневой позиции.

Если первая позиция - корень, и я привык видеть двоичные деревья (которые могут быть представлены в виде списка), тогда слово, относящееся к деревьям, похоже, будет в порядке. Дендрит имеет правильную начальную букву и, кажется, подходит. Он представляет последний из дерева без корня.

Еще один дубль от Роберта Смита:

CAR - «Передняя область клетки»

CDR - «Спинной регион клетки»

«Мы можем получить вторую часть клетки. Давайте назовем эту часть дорсальной областью (почему не задней? Значение дорсальной части имеет больше смысла в списках, в том смысле, что дорсальная область списка [1,2,3] ] является частью «ближе к концу», [2,3], тогда как задняя часть будет просто 3). "

из Lisp имеет слишком много скобок… (… или так они говорят!) Роберт Смит, 7 ноября 2010 года

Symbo1ics

Я знаю, что это не имеет никакого отношения к тому, чем изначально были аббревиатуры, но даже Стив Рассел сказал:

"Из-за неудачной временной задержки вдохновения мы не могли придумать никаких других имен для двух указателей в узле списка, кроме" address "и "mentment", поэтому мы назвали функции CAR для "Contents of Address" Регистра »и CDR для« Содержания Декрета Регистра ».

После нескольких месяцев и нескольких занятий по LISP мы поняли, что «first» и «rest» были лучшими именами, и мы (Джон Маккарти, я и некоторые другие участники AI Project) пытались заставить людей используйте их вместо этого.

Увы, было уже слишком поздно! Мы не могли заставить это придерживаться вообще. Таким образом, у нас есть автомобиль и CDR. "

Происхождение CAR и CDR в LISP

1 голос
/ 20 августа 2009

«машина» и «cdr», по крайней мере для меня, - это вещи, которые вы только что изучили, например звуки для слов «влево» и «вправо».

«first» и «rest» являются мнемоническими, только если деконструируемый объект является списком. Если это фактические минусы (то есть пунктирная пара), они не помогают.

Они застряли, потому что больше ничего не было, почти пятьдесят лет назад, когда впервые был разработан LISP. Все статьи, все книги, весь код, использованный CAR и CDR, и все привыкли к ним.

1 голос
/ 20 августа 2009

У меня нет мнемоники для автомобиля и CDR. Я имею в виду, что их только двое, и если вы вообще используете Lisp, мне кажется, вы просто знаете. (Черт, я даже не пользуюсь Лиспом и помню.)

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

0 голосов
/ 17 июля 2014

Книга «Нежное введение в Лисп» отлично объясняет такие большие вещи, как

CADDDAADDR

Начните с правой стороны, идущей влево (ADDDAADD), поэтому вышеизложенное (где -> - это "затем"): CDR->CDR->CAR->CAR->CDR->CDR->CDR->CAR.

Причина, по которой CAR & CDR предпочтительнее, чем firt и rest, заключается (я думаю) в том, что они могут быть объединены в цепочку для формирования функций, подобных приведенным выше.

0 голосов
/ 30 ноября 2013

Вы можете избежать этой проблемы, используя first и rest вместо.

0 голосов
/ 22 августа 2009

Если вас не интересует идиоматизм, используйте сначала и отдыхайте. car и cdr имеют то преимущество, что могут быть объединены в такие комбинации, как caddr cddr и так далее, если вы находите это полезным.

В противном случае автомобиль стоит первым, а по алфавиту - первым из двух.

...