Що означає «моя інша машина - це компакт-диск»?


89

Хтось, хто добре розбирається в шепелявості, може пояснити мені цей жарт? Я прочитав кілька функціональних мов програмування і знаю, що CAR / CDR означає Зміст Адреси / Реєстру зменшень, але я все ще не розумію гумору.


10
почніть трохи "інтригувати", і тоді ви зрозумієте. ха-ха-ха. це краще, ніж наклейка на бампер, на якій написано "цей програміст зупиняється на всіх зборах сміття".
gonzobrains

8
Приблизно через півгодини після того, як це запитання було пов’язане з news.ycombinator.com/item?id=14416846, воно було призупинено. Це 8-річне питання. Як неприємно, я не можу сперечатися проти статусу очікування, але мені не подобається атмосфера його призупинення зараз .
i336_

@ i336_ на мета-обговорення , він закритий, щоб запобігти забиванню нових відповідей чергою огляду.
Ендрю

2
Чи немає інших причин затримки? Думка заснована ... неправильно
Ентенду

6
Чи не слід його захищати замість цього?
Федеріко клез Куллока

Відповіді:


134

У Lisp зв’язаний елемент списку називається CONS. Це структура даних із двома елементами, яка з історичних причин називається CAR та CDR. (Деякі програмісти Common Lisp вважають за краще посилатися на них за допомогою функцій FIRST та REST, тоді як іншим подобається CAR та CDR, оскільки вони добре поєднуються з попередньо складеними версіями, такими як (CADR x) ≡ (CAR (CDR x)).

Жарт - це пародія на наклейки на бампер, які ви іноді бачите на побитих старих автомобілях, кажучи: "Моя інша машина - Porsche / BMW / тощо".

Моя відповідь на цей жарт завжди була: "Мій інший CAR - це CADR. CDR - це зовсім не CAR".


1
дуже приємно, але неправда. Не після (rplacd a (car a))цього явно не буде. :) Загальний LISP - це не Haskell. Але дякую за пояснення. +1.
Уілл Несс

2
Я не хотів пояснювати свій жарт, але ... справа в тому, що операція CDR - це не операція CAR ; це окрема проблема від того, чи еквівалентні значення через RPLACD чи інше.
Пітер С. Хаузел

1
А також, CDR начебто звучить як назва спортивного автомобіля, що повторює TVR або GT-R, тому можна було прочитати текст і навіть не усвідомити глибшого, LISP-y значення.
grkvlt

4
Якщо хтось хоче знати, CAR означає Зміст Адресної частини Реєстраційного номера , а CDR - Зміст Зменшуваної частини Реєстраційного номера . Дякую, Вікіпедія !
Коджіро

1
Як щодо «інших моїх carIS first». :)
Каз

34

Так, однозначно жартівливий жарт.

Назви походять від IBM 704, але це не жарт.

Жарт - це (поганий) каламбур на тему "моя інша машина - ___". Але жарт про рекурсію.

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

Отже, у вас є машина, але ваша інша машина - це ваш cdr, тому що ви завжди можете отримати машину з cdr, оскільки в cdr завжди (в рекурсії) більше елементів. Зрозумів? Сміятися ще?

Вам, мабуть, доведеться навчитися шепеляві, щоб насправді трохи посміятися, чи ні. Звичайно, до того часу ви, мабуть, опинитеся хаотично без особливих причин, тому що:

Lisp робить вас цикливим.


2
І з вашого останнього подиху розпочалася ще одна гра.
zxq9

14

// Виходячи зі схеми
схеми має дуже мало структур даних, один з них є кортежем: '(first . second). У цьому випадку carє першим елементом, а cdrє другим. Цю конструкцію можна розширити для створення списків, дерев та інших структур.
Жарт не дуже кумедний.


1
Чи не кортеж буде '(перший. Другий)?
Кен

1
@Ken - знову ж таки, я не знаю lisp, але схема не має такого складного синтаксису. Навіть списки складаються з пар.
Кобі

3
Справді, було б точніше сказати, що кортеж є (first . second). Список '(first second)складається з двох кортежів, наприклад:(cons first (cons second null))
mqp

1
Кобі: Я знаю Ліспа, і я не впевнений, що ви маєте на увазі під "складним синтаксисом". Пунктирний синтаксис - це спосіб написання пар у Lisp, включаючи схему: gnu.org/software/mit-scheme/documentation/mit-scheme-ref/… . КДР (перша секунда) - це (друга), а не друга.
Кен

3
Отже, тепер ми голосуємо за виправлення? Ну добре. Сонце буде світити.
Кобі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.