“ รถอีกคันของฉันคือ cdr” หมายความว่าอย่างไร


89

ใครมีความเชี่ยวชาญด้านเสียงกระเพื่อมช่วยอธิบายเรื่องตลกนี้ให้ฉันฟังได้ไหม ฉันได้อ่านภาษาโปรแกรมที่ใช้งานได้แล้วและรู้ว่า CAR / CDR หมายถึงเนื้อหาของที่อยู่ / ทะเบียนการลด แต่ฉันยังไม่เข้าใจอารมณ์ขันจริงๆ


10
เริ่ม "วางแผนรอบ ๆ " สักหน่อยแล้วคุณจะเข้าใจ ฮ่า ๆ ๆ . มันดีกว่าสติกเกอร์บัมเปอร์ที่ระบุว่า "โปรแกรมเมอร์คนนี้หยุดเก็บขยะทั้งหมด"
gonzobrains

8
ประมาณครึ่งชั่วโมงหลังจากที่มีการเชื่อมโยงคำถามนี้จากnews.ycombinator.com/item?id=14416846คำถามนี้ถูกระงับ เป็นคำถามอายุ 8 ขวบ รำคาญฉันไม่สามารถโต้เถียงกับสถานะในการระงับ แต่ฉันไม่ชอบกลิ่นอายของการวางไว้บนค้างไว้ในขณะนี้
i336_

@ i336_ ต่อการสนทนาเมตาจะปิดเพื่อป้องกันไม่ให้คำตอบใหม่อุดตันในคิวการตรวจสอบ
Andrew

2
ไม่มีเหตุผลอื่นใด ตามความเห็นคือ ... ผิด
Entendu

6
ไม่ควรป้องกันแทน?
Federico klez Culloca

คำตอบ:


134

ใน Lisp องค์ประกอบรายการที่เชื่อมโยงเรียกว่า CONS เป็นโครงสร้างข้อมูลที่มีสององค์ประกอบเรียกว่า CAR และ CDR ด้วยเหตุผลทางประวัติศาสตร์ (โปรแกรมเมอร์ Common Lisp บางคนชอบอ้างถึงพวกเขาโดยใช้ฟังก์ชัน FIRST และ REST ในขณะที่คนอื่น ๆ เช่น CAR และ CDR เพราะเข้ากันได้ดีกับเวอร์ชันที่เตรียมไว้ล่วงหน้าเช่น (CADR x) ≡ (CAR (CDR x))

เรื่องตลกคือการล้อเลียนสติกเกอร์กันชนที่บางครั้งคุณเห็นในรถเก่า ๆ ที่ทุบตีพูดว่า "รถอีกคันของฉันคือปอร์เช่ / BMW / ฯลฯ "

คำตอบของฉันที่มีต่อเรื่องตลกนี้คือ "รถคันอื่นของฉันคือ CADR CDR ไม่ใช่ CAR เลย"


1
ดีมาก แต่ไม่จริง ไม่หลังจาก(rplacd a (car a))นั้นจะไม่ปรากฏอย่างชัดเจน :) LISP ทั่วไปไม่ใช่ Haskell แต่ขอบคุณสำหรับคำอธิบาย +1.
Will Ness

2
ฉันไม่ได้ต้องการที่จะอธิบายเรื่องตลกของฉัน แต่ ... ประเด็นก็คือว่า CDR การดำเนินงานไม่ได้เป็นรถดำเนินการ ; นั่นเป็นปัญหาที่แยกจากกันว่าค่าจะเทียบเท่าผ่าน RPLACD หรืออะไรก็ตาม
Peter S. Housel

1
นอกจากนี้ CDR ยังฟังดูเหมือนชื่อของรถสปอร์ตสะท้อน TVR หรือ GT-R ดังนั้นใคร ๆ ก็อ่านข้อความได้และไม่รู้ถึงความหมายที่ลึกซึ้งยิ่งขึ้น LISP-y
grkvlt

4
ในกรณีที่ทุกคนต้องการที่จะรู้ว่ารถยืนสำหรับเนื้อหาของส่วนที่อยู่ของจำนวนสมาชิกและ CDR ย่อมาจากเนื้อหาของส่วนที่ปรับตัวลดลงของจำนวนสมาชิก ขอบคุณWikipedia !
kojiro

1
แล้ว "อีกคนของฉันcarคืออะไรfirst" :)
Kaz

34

ใช่เรื่องตลกเกินบรรยาย

ชื่อนี้มาจาก IBM 704 แต่นั่นไม่ใช่เรื่องตลก

เรื่องตลกคือ (ไม่ดี) เล่นสำนวนที่ "รถคันอื่นของฉันคือ ___ แต่เรื่องตลกเกี่ยวกับการเรียกซ้ำ

เมื่อคุณวน / จัดการ / เลือก / เรียกใช้ / เพิ่มเติมในเสียงกระเพื่อมคุณจะใช้การรวมกันของรถยนต์ (องค์ประกอบแรกในรายการ) และ cdr (ส่วนที่เหลือของรายการ) เพื่อเล่นกลฟังก์ชั่น

คุณมีรถแล้ว แต่รถอีกคันของคุณคือ cdr เพราะคุณสามารถรับรถจาก cdr ได้ตลอดเวลาเนื่องจาก cdr มีองค์ประกอบมากกว่า (ในการเรียกซ้ำ) เสมอ รับหรือไม่ หัวเราะยัง?

คุณอาจจะต้องเรียนรู้เสียงกระเพื่อมที่จะหัวเราะเบา ๆ จริง ๆ หรือไม่ แน่นอนว่าในตอนนั้นคุณอาจพบว่าตัวเองหัวเราะเบา ๆ โดยไม่มีเหตุผลชัดเจนเนื่องจาก:

เสียงกระเพื่อมทำให้คุณวนเวียน


2
และด้วยลมหายใจสุดท้ายของคุณเกมอื่นก็เริ่มขึ้น
zxq9

14

// มาจากโครงการโครงการมีโครงสร้างข้อมูลน้อยมากหนึ่งในนั้นคือสิ่งอันดับ:
'(first . second)ในกรณีนี้carเป็นองค์ประกอบแรกและcdrเป็นองค์ประกอบที่สอง โครงสร้างนี้สามารถขยายเพื่อสร้างรายการต้นไม้และโครงสร้างอื่น ๆ
เรื่องตลกไม่ตลกมาก


1
ทูเปิลจะไม่เป็น '(อันดับแรกที่สอง) หรือไม่?
Ken

1
@ เคน - อีกครั้งฉันไม่รู้เสียงกระเพื่อม แต่แบบแผนไม่มีไวยากรณ์ที่ซับซ้อนเช่นนี้ แม้แต่รายการที่ทำจากคู่
Kobi

3
อันที่จริงมันจะถูกต้องกว่าที่จะบอกว่าทูเปิ(first . second)ล รายการ'(first second)ประกอบด้วยสองสิ่งต่อไปนี้:(cons first (cons second null))
mqp

1
Kobi: ฉันรู้จัก Lisp และฉันไม่แน่ใจว่า "ไวยากรณ์เชิงซ้อน" หมายถึงอะไร ไวยากรณ์ประเป็นวิธีที่คุณเขียนคู่ในเสียงกระเพื่อมรวมทั้งโครงการ: gnu.org/software/mit-scheme/documentation/mit-scheme-ref/... cdr ของ (วินาทีแรก) คือ (วินาที) ไม่ใช่วินาที
Ken

3
ตอนนี้เราได้รับการโหวตให้ถูกต้องหรือไม่? โอ้ดี ดวงอาทิตย์จะส่องแสง
Kobi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.