Co oznacza „mój drugi samochód to CDR”?

89

Czy ktoś dobrze zorientowany w seplenienie może mi wyjaśnić ten żart? Czytałem trochę o funkcjonalnych językach programowania i wiem, że CAR / CDR oznacza zawartość rejestru adresu / dekrementacji, ale nadal nie rozumiem tego humoru.

CaptainCasey
źródło
10
zacznij trochę „kombinować”, a wtedy zrozumiesz. hahaha. to lepsze niż naklejka na zderzak z napisem „ten programista zatrzymuje się przy wszystkich kolekcjach śmieci”.
gonzobrains
8
Około pół godziny po tym, jak link do tego pytania z news.ycombinator.com/item?id=14416846 został zawieszony. To pytanie od 8 lat. Irytujące, że nie mogę spierać się ze stanem wstrzymania, ale nie podoba mi się atmosfera, która powoduje teraz zawieszenie .
i336_
@ i336_ zgodnie z meta dyskusją , jest ona zamknięta, aby nowe odpowiedzi nie zapychały kolejki recenzji.
Andrew,
2
Czy nie ma innych powodów wstrzymania?
Oparcie się na
6
Czy zamiast tego nie powinien być chroniony?
Federico klez Culloca

Odpowiedzi:

134

W Lispie połączony element listy nazywany jest CONS. Jest to struktura danych z dwoma elementami, zwana CAR i CDR ze względów historycznych. (Niektórzy programiści Common Lisp wolą odwoływać się do nich używając funkcji FIRST i REST, podczas gdy inni lubią CAR i CDR, ponieważ dobrze pasują do wstępnie skomponowanych wersji, takich jak (CADR x) ≡ (CAR (CDR x)).

Żart jest parodią naklejek na zderzakach, które czasem widzisz na zniszczonych starych samochodach i mówią: „Mój drugi samochód to Porsche / BMW / itd.”.

Moja odpowiedź na ten żart zawsze brzmiała: „Mój drugi SAMOCHÓD to CADR. CDR wcale nie jest SAMOCHODEM”.

Peter S. Housel
źródło
1
bardzo ładne, ale nieprawda. Nie po (rplacd a (car a))tym, jak oczywiście nie będzie. :) Zwykły LISP to nie Haskell. Ale dzięki za wyjaśnienie. +1.
Will Ness
2
Nie chciałem wyjaśniać swojego żartu, ale ... Chodzi o to, że operacja CDR nie jest operacją CAR ; to osobna kwestia od tego, czy wartości są równoważne przez RPLACD lub cokolwiek innego.
Peter S. Housel
1
Poza tym CDR brzmi jak nazwa samochodu sportowego, odbijając się echem TVR lub GT-R, więc można było czytać tekst i nie zdawać sobie nawet sprawy z głębszego, LISP-owego znaczenia.
grkvlt
4
Na wypadek, gdyby ktoś chciał wiedzieć, CAR oznacza zawartość części adresowej numeru rejestru , a CDR oznacza zawartość części zmniejszającej numer rejestru . Dzięki, Wikipedia !
kojiro
1
A co powiesz na „Mój inny carjest first”. :)
Kaz
34

Tak, zdecydowanie żart dla maniaków.

Nazwy pochodzą z IBM 704, ale to nie jest żart.

Żart to (kiepska) gra słów „mój drugi samochód to ___”. Ale żart dotyczy rekurencji.

Kiedy wykonujesz pętlę / manipulujesz / wybierasz / wywołujesz / more w lisp, używasz kombinacji car (pierwszy element na liście) i cdr (reszta listy) do żonglowania funkcjami.

Więc masz samochód, ale twój drugi samochód jest twoim cdr, ponieważ zawsze możesz uzyskać samochód z cdr, ponieważ cdr jest zawsze (w rekurencji) więcej elementów. Zdobyć? Śmiej się jeszcze?

Prawdopodobnie będziesz musiał nauczyć się seplenienie, aby trochę chichotać, lub nie. Oczywiście do tego czasu prawdopodobnie będziesz chichotać losowo bez wyraźnego powodu, ponieważ:

Lisp sprawia, że ​​jesteś oszołomiony.

zen
źródło
2
Z ostatnim oddechem rozpoczęła się kolejna gra.
zxq9
14

// Jadąc ze schematu
Scheme ma bardzo niewiele struktur danych, jednym z nich jest krotka: '(first . second). W tym przypadku carjest to pierwszy element i cdrdrugi. Ta konstrukcja może zostać rozszerzona o tworzenie list, drzew i innych struktur.
Żart nie jest zbyt zabawny.

Kobi
źródło
1
Czy krotka nie byłaby „(pierwsza. Sekunda)?
Ken
1
@Ken - znowu nie znam lispa, ale schemat nie ma tak złożonej składni. Nawet listy składają się z par.
Kobi
3
Rzeczywiście dokładniej byłoby powiedzieć, że krotka jest (first . second). Lista '(first second)składa się z dwóch krotek, na przykład:(cons first (cons second null))
mqp
1
Kobi: Znam Lispa i nie jestem pewien, co masz na myśli przez „złożoną składnię”. Składnia kropkowana to sposób, w jaki piszesz pary w Lisp, w tym Scheme: gnu.org/software/mit-scheme/documentation/mit-scheme-ref/… . Cdr (pierwsza sekunda) to (druga), a nie druga.
Ken
3
Więc teraz jesteśmy odrzucani za poprawianie? No cóż. Będzie świeciło słońce.
Kobi