Apa artinya "mobil saya yang lain adalah cdr"?


89

Adakah yang ahli dalam cadel menjelaskan lelucon ini kepada saya? Saya telah membaca beberapa bahasa pemrograman fungsional dan mengetahui bahwa CAR / CDR berarti Isi Alamat / Pengurangan Register tetapi saya masih tidak terlalu mengerti humornya.


10
mulailah "bermain-main" sedikit dan kemudian Anda akan mengerti. ha ha ha. ini lebih baik daripada stiker bemper yang bertuliskan "programmer ini berhenti di semua pengumpulan sampah."
Gonzobrains

8
Kira-kira setengah jam setelah pertanyaan ini ditautkan dari news.ycombinator.com/item?id=14416846 pertanyaan itu ditunda. Ini pertanyaan berusia 8 tahun. Dengan kesal, saya tidak bisa membantah status ditahan tapi saya tidak suka getaran menahannya sekarang .
i336_

@ i336_ per diskusi meta , ditutup untuk mencegah jawaban baru menyumbat antrean tinjauan.
Andrew

2
Apakah tidak ada alasan menahan lain? Berdasarkan opini adalah ... salah
Entendu

6
Bukankah seharusnya itu Dilindungi?
Federico klez Culloca

Jawaban:


134

Di Lisp, elemen daftar tertaut disebut CONS. Ini adalah struktur data dengan dua elemen, yang disebut CAR dan CDR karena alasan historis. (Beberapa programmer Common Lisp lebih suka merujuknya menggunakan fungsi FIRST dan REST, sementara yang lain menyukai CAR dan CDR karena mereka cocok dengan versi yang telah dikomposisi sebelumnya seperti (CADR x) ≡ (CAR (CDR x)).

Lelucon itu adalah parodi stiker bemper yang terkadang Anda lihat di mobil tua usang yang mengatakan "Mobil saya yang lain adalah Porsche / BMW / dll."

Tanggapan saya terhadap lelucon ini selalu "CAR saya yang lain adalah CADR. CDR sama sekali bukan CAR."


1
sangat bagus, tapi tidak benar. Tidak setelah (rplacd a (car a))itu jelas tidak akan. :) LISP yang umum bukanlah Haskell. Tapi terima kasih atas penjelasannya. +1.
Will Ness

2
Saya tidak ingin menjelaskan lelucon saya, tetapi ... intinya adalah bahwa operasi CDR bukanlah operasi CAR ; itu adalah masalah terpisah dari apakah nilainya setara atau tidak melalui RPLACD atau apa pun.
Peter S. Housel

1
Dan juga, CDR terdengar seperti nama sebuah mobil sport, menggema TVR atau GT-R, jadi orang bisa membaca teksnya dan bahkan tidak menyadari arti yang lebih dalam, LISP-y.
grkvlt

4
Jika ada yang ingin tahu, CAR adalah singkatan dari Contents of the Address part of Register number , dan CDR adalah Contents of the Decrement bagian dari Register number . Terima kasih, Wikipedia !
kojiro

1
Bagaimana dengan "My other caris first". :)
Kaz

34

Ya, pasti lelucon pecandu.

Nama-nama itu berasal dari IBM 704, tapi itu bukan lelucon.

Leluconnya adalah (buruk) pelesetan pada "mobil saya yang lain adalah ___." Tapi leluconnya adalah tentang rekursi.

Ketika Anda mengulang / memanipulasi / memilih / memanggil / lebih di cadel, Anda menggunakan kombinasi mobil (elemen pertama dalam daftar) dan cdr (sisa daftar) untuk menyulap fungsi.

Jadi Anda punya mobil, tapi mobil Anda yang lain adalah cdr Anda karena Anda selalu bisa mendapatkan mobil dari cdr karena cdr selalu (dalam rekursi) lebih banyak elemen. Mendapatkan? Tertawa belum?

Anda mungkin harus belajar cadel untuk benar-benar tertawa kecil, atau tidak. Tentu saja, pada saat itu, Anda mungkin akan tertawa terbahak-bahak tanpa alasan yang jelas karena:

Lisp membuatmu gila.


2
Dan dengan nafas terakhirmu, permainan lain dimulai.
zxq9

14

// Datang dari Skema
Skema memiliki sangat sedikit struktur data, salah satunya adalah tupel: '(first . second). Dalam hal ini, caradalah elemen pertama, dan cdrmerupakan yang kedua. Konstruksi ini dapat diperluas untuk membuat daftar, pohon, dan struktur lainnya.
Lelucon itu tidak terlalu lucu.


1
Bukankah tupelnya adalah '(first. Second)?
Ken

1
@Ken - sekali lagi, saya tidak tahu cadel, tetapi skema tidak memiliki sintaks yang rumit. Daftar genap dibuat berpasangan.
Kobi

3
Memang, akan lebih akurat untuk mengatakan bahwa tupel adalah (first . second). Daftar '(first second)ini terdiri dari dua tupel, seperti ini:(cons first (cons second null))
mqp

1
Kobi: Saya tahu Lisp, dan saya tidak yakin apa yang Anda maksud dengan "sintaks kompleks". Sintaks bertitik adalah cara Anda menulis pasangan di Lisp, termasuk Skema: gnu.org/software/mit-scheme/documentation/mit-scheme-ref/… . Cdr dari (detik pertama) adalah (detik), bukan detik.
Ken

3
Jadi, sekarang kita mendapat suara negatif karena dikoreksi? Baiklah. Matahari akan bersinar.
Kobi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.