“Xe khác của tôi là cdr” nghĩa là gì?


89

Có ai thông thạo ngọng giải thích cho tôi câu chuyện cười này được không? Tôi đã đọc một số ngôn ngữ lập trình chức năng và biết rằng CAR / CDR có nghĩa là Nội dung của Đăng ký Địa chỉ / Giảm dần nhưng tôi vẫn không thực sự hiểu sự hài hước.


10
bắt đầu "mưu đồ" một chút rồi bạn sẽ hiểu. hahaha. nó tốt hơn một nhãn dán đệm có nội dung "lập trình viên này dừng lại ở tất cả các bộ sưu tập rác."
gonzobrains

8
Khoảng nửa giờ sau khi câu hỏi này được liên kết với news.ycombinator.com/item?id=14416846, câu hỏi này đã bị tạm dừng. Đó là một câu hỏi 8 năm tuổi. Thật khó chịu, tôi không thể phản bác lại trạng thái tạm dừng nhưng tôi không thích sự rung cảm của việc giữ nó lúc này .
i336_

@ i336_ cho mỗi cuộc thảo luận meta , nó bị đóng để ngăn các câu trả lời mới làm tắc nghẽn hàng đợi đánh giá.
Andrew

2
Không có bất kỳ lý do giữ nào khác? Dựa trên ý kiến ​​là ... sai
Entendu

6
Thay vào đó, nó có nên được Bảo vệ không?
Federico klez Culloca

Câu trả lời:


133

Trong Lisp, một phần tử danh sách liên kết được gọi là CONS. Nó là một cấu trúc dữ liệu có hai yếu tố, được gọi là CAR và CDR vì lý do lịch sử. (Một số lập trình viên Lisp thông thường thích đề cập đến chúng bằng cách sử dụng các hàm FIRST và REST, trong khi những người khác thích CAR và CDR vì chúng rất phù hợp với các phiên bản đã được soạn sẵn như (CADR x) ≡ (CAR (CDR x)).

Trò đùa là một sự bắt chước của những miếng dán cản mà bạn đôi khi thấy trên những chiếc xe cũ nát với câu nói "Chiếc xe khác của tôi là Porsche / BMW / v.v.".

Câu trả lời của tôi cho câu nói đùa này luôn là "CAR khác của tôi là CADR. CDR hoàn toàn không phải là CAR."


1
rất hay, nhưng không đúng. Không phải sau khi (rplacd a (car a))nó rõ ràng sẽ không. :) LISP thông thường không phải là Haskell. Nhưng cảm ơn vì lời giải thích. +1.
Will Ness

2
Tôi không muốn giải thích trò đùa của mình, nhưng ... vấn đề là hoạt động CDR không phải là hoạt động CAR ; đó là một vấn đề riêng biệt với việc các giá trị có tương đương hay không thông qua RPLACD hay bất cứ điều gì.
Peter S. Housel

1
Ngoài ra, CDR cũng giống như tên của một chiếc xe thể thao, giống như TVR hoặc GT-R, vì vậy người ta có thể đọc văn bản và thậm chí không nhận ra ý nghĩa sâu sắc hơn, LISP-y.
grkvlt

4
Trong trường hợp ai đó muốn biết, CAR là viết tắt của Nội dung của phần Địa chỉ của số Đăng ký , và CDR là viết tắt của Nội dung của phần Giảm của số Đăng ký . Cảm ơn, Wikipedia !
kojiro

1
Còn về "My other caris first". :)
Kaz

34

Vâng, chắc chắn là một trò đùa lập dị.

Những cái tên đến từ IBM 704, nhưng đó không phải là trò đùa.

Trò đùa là (xấu) chơi chữ "chiếc xe khác của tôi là một ___." Nhưng trò đùa là về đệ quy.

Khi bạn lặp / thao tác / chọn / gọi / thêm trong lisp, bạn sử dụng kết hợp car (phần tử đầu tiên trong danh sách) và cdr (phần còn lại của danh sách) để tung các hàm.

Vì vậy, bạn đã có một chiếc ô tô, nhưng chiếc xe khác của bạn là cdr của bạn bởi vì bạn luôn có thể nhận được một chiếc ô tô từ cdr vì cdr luôn có nhiều phần tử hơn (trong đệ quy). Hiểu rồi? Cười chưa?

Có thể bạn sẽ phải học ngọng để thực sự cười khúc khích một chút, hoặc không. Tất nhiên, đến lúc đó, bạn có thể sẽ thấy mình tự nhiên cười khúc khích mà không rõ lý do vì:

Lisp làm cho bạn bị rối.


2
Và với hơi thở cuối cùng của bạn, một trò chơi khác bắt đầu.
zxq9

14

// Đến từ Scheme
Lược đồ có rất ít cấu trúc dữ liệu, một trong số chúng là một tuple : '(first . second). Trong trường hợp này, carlà phần tử đầu tiên và cdrlà phần tử thứ hai. Cấu trúc này có thể được mở rộng để tạo danh sách, cây và các cấu trúc khác.
Trò đùa không vui lắm.


1
Tuple sẽ không phải là '(thứ nhất. Thứ hai)?
Ken

1
@Ken - một lần nữa, tôi không biết ngọng, nhưng lược đồ không có cú pháp phức tạp như vậy. Danh sách chẵn được tạo thành từng cặp.
Kobi

3
Thật vậy, sẽ chính xác hơn nếu nói rằng tuple (first . second). Danh sách này '(first second)được làm bằng hai tuples, như thế này:(cons first (cons second null))
mqp

1
Kobi: Tôi biết Lisp, và tôi không chắc ý bạn là "cú pháp phức tạp". Cú pháp dấu chấm là cách bạn viết các cặp trong Lisp, bao gồm Scheme: gnu.org/software/mit-scheme/documentation/mit-scheme-ref/… . Cdr của (giây đầu tiên) là (thứ hai), không phải thứ hai.
Ken

2
Vì vậy, bây giờ chúng tôi bị đánh giá thấp vì đã được sửa chữa? ồ, tốt. Mặt trời sẽ tỏa sáng.
Kobi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.