Что означает «моя другая машина - компакт-диск»?


89

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


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

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

@ i336_ согласно мета-дискуссии , он закрыт, чтобы новые ответы не засоряли очередь на просмотр.
Эндрю

2
Нет ли других причин задержки? Основанное на мнении ... неверно
Entendu

6
Разве его не следует защищать?
Федерико Клез Каллока

Ответы:


134

В Лиспе элемент связанного списка называется 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-значения.
grkvlt

4
На случай, если кто-то захочет узнать, CAR означает содержимое адресной части номера регистра , а CDR означает содержимое части декремента номера регистра . Спасибо, Википедия !
Коджиро

1
Как насчет «других моих carIS first». :)
Kaz

34

Да, определенно шутка компьютерных фанатов.

Названия взяты от IBM 704, но это не шутка.

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

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

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

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

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


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

14

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


1
Разве кортеж не будет '(первый, второй)?
Кен

1
@Ken - опять же, я не знаю лиспа, но у схемы нет такого сложного синтаксиса. Даже списки состоят из пар.
Коби

3
Действительно, правильнее было бы сказать, что кортеж есть (first . second). Список '(first second)состоит из двух кортежей, например:(cons first (cons second null))
mqp

1
Коби: Я знаю Лисп, и я не уверен, что вы имеете в виду под «сложным синтаксисом». Пунктирный синтаксис - это то, как вы пишете пары в Лиспе, включая схему: gnu.org/software/mit-scheme/documentation/mit-scheme-ref/… . Cdr (первая секунда) - (вторая), а не вторая.
Кен

3
Итак, теперь нас отвергают за исправление? Ну что ж. Будет светить солнце.
Коби
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.