[lisp] “내 다른 차는 cdr”이란 무엇을 의미합니까?

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



답변

Lisp에서는 연결 목록 요소를 CONS라고합니다. 역사적 이유로 CAR과 CDR이라는 두 가지 요소가있는 데이터 구조입니다. (일부 Common Lisp 프로그래머는 FIRST 및 REST 함수를 사용하여 참조하는 것을 선호하는 반면 CAR 및 CDR과 같은 다른 프로그래머는 (CADR x) ≡ (CAR (CDR x))와 같은 사전 구성된 버전에 잘 맞기 때문에이를 선호합니다.)

이 농담은 “내 다른 차는 포르쉐 / BMW / etc.”라고 말하는 구타 낡은 자동차에서 가끔 볼 수있는 범퍼 스티커의 패러디입니다.

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


답변

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

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

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

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

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

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

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


답변

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


답변