"내 다른 차는 cdr"이란 무엇을 의미합니까?


89

lisp에 정통한 사람이이 농담을 나에게 설명 할 수 있습니까? 함수형 프로그래밍 언어에 대해 읽어 봤고 CAR / CDR이 주소 / 감소 레지스터의 내용을 의미한다는 것을 알고 있지만 여전히 유머를 이해하지 못합니다.


10
"주위 계획"을 조금 시작하면 이해하게 될 것입니다. 하하하. "이 프로그래머는 모든 가비지 수집에서 멈춘다"라는 범퍼 스티커보다 낫다.
gonzobrains 2011 년

8
이 질문이 news.ycombinator.com/item?id=14416846 에서 링크 된 지 약 30 분 후에 보류되었습니다. 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 / etc."라고 말하는 구타 낡은 자동차에서 가끔 볼 수있는 범퍼 스티커의 패러디입니다.

이 농담에 대한 나의 반응 은 항상 "내 다른 차는 CADR입니다. CDR은 전혀 차가 아닙니다."


1
아주 좋지만 사실은 아닙니다. 그 후에 (rplacd a (car a))는 분명히 그렇지 않을 것입니다. :) Common LISP는 Haskell이 아닙니다. 그러나 설명해 주셔서 감사합니다. +1.
Will Ness

2
내 농담을 설명하고 싶지 않았지만 ... 요점은 CDR 작업 이 CAR 작업 이 아니라는 것입니다 . 이는 RPLACD 등을 통해 값이 동일한 지 여부와는 별개의 문제입니다.
Peter S. Housel 2014

1
또한 CDR 같은 소리가 스포츠카 이름처럼 TVR이나 GT-R을 울려서 텍스트를 읽을 수 있고 더 깊은 LISP-y 의미조차 깨닫지 못합니다.
grkvlt

4
누구나 알고 싶은 경우에 CAR은 Register number의 Address 부분의 Contents , CDR은 Register number의 Decrement 부분의 Contents를 의미합니다 . 감사합니다, Wikipedia !
kojiro

1
"My other caris first" 는 어때요 ? :)
Kaz

34

예, 확실히 괴짜 농담입니다.

이름은 IBM 704에서 따 왔지만 농담이 아닙니다.

농담은 "내 다른 차는 ___"에 대한 (나쁜) 말장난입니다. 그러나 농담은 재귀에 관한 것입니다.

루프 / 조작 / 선택 / 호출 / 추가 작업을 수행 할 때 car (목록의 첫 번째 요소)와 cdr (나머지 목록)의 조합을 사용하여 기능을 저글링합니다.

그래서 당신은 차를 가지고 있지만 다른 차는 당신의 cdr입니다. 알 겠어요? 아직 웃어?

실제로 조금 웃거나 말거나하기 위해서는 lisp를 배워야 할 것입니다. 물론, 그때 쯤이면 다음과 같은 이유로 명백한 이유없이 무작위로 웃을 것입니다.

Lisp는 당신을 멍청하게 만듭니다.


2
그리고 마지막 숨을 쉬면서 다른 게임이 시작되었습니다.
zxq9 2014 년

14

// Coming from Scheme
Scheme에는 데이터 구조가 거의 없으며 그중 하나는 튜플 '(first . second)입니다. 이 경우 car는 첫 번째 요소이고 cdr두 번째 요소 입니다. 이 구성을 확장하여 목록, 트리 및 기타 구조를 만들 수 있습니다.
농담은별로 재미 없어요.


1
튜플은 '(첫 번째. 두 번째)가 아닐까요?

1
@Ken-다시 말하지만, 나는 lisp를 모르지만 체계에는 그렇게 복잡한 구문이 없습니다. 목록도 쌍으로 구성됩니다.
Kobi

3
사실, 튜플이라고 말하는 것이 더 정확할 것입니다 (first . second). 목록 '(first second)은 다음과 같이 두 개의 튜플로 구성됩니다.(cons first (cons second null))
mqp

1
Kobi : Lisp를 알고 있으며 "복잡한 구문"이 무엇을 의미하는지 잘 모르겠습니다. 점으로 구분 된 구문은 Scheme : gnu.org/software/mit-scheme/documentation/mit-scheme-ref/…를 포함하여 Lisp에서 쌍을 작성하는 방법 입니다. (첫 번째 초)의 cdr은 두 번째가 아니라 (두 번째)입니다.

3
자, 이제 우리는 정정 당했다는 이유로 반대표를 받습니까? 아, 그래. 태양이 빛날 것입니다.
Kobi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.