lisp에 정통한 사람이이 농담을 나에게 설명 할 수 있습니까? 함수형 프로그래밍 언어에 대해 읽어 봤고 CAR / CDR이 주소 / 감소 레지스터의 내용을 의미한다는 것을 알고 있지만 여전히 유머를 이해하지 못합니다.
lisp에 정통한 사람이이 농담을 나에게 설명 할 수 있습니까? 함수형 프로그래밍 언어에 대해 읽어 봤고 CAR / CDR이 주소 / 감소 레지스터의 내용을 의미한다는 것을 알고 있지만 여전히 유머를 이해하지 못합니다.
답변:
Lisp에서는 연결 목록 요소를 CONS라고합니다. 역사적 이유로 CAR과 CDR이라는 두 가지 요소가있는 데이터 구조입니다. (일부 Common Lisp 프로그래머는 FIRST 및 REST 함수를 사용하여 참조하는 것을 선호하는 반면 CAR 및 CDR과 같은 다른 프로그래머는 (CADR x) ≡ (CAR (CDR x))와 같은 사전 구성된 버전에 잘 맞기 때문에이를 선호합니다.)
이 농담은 "내 다른 차는 포르쉐 / BMW / etc."라고 말하는 구타 낡은 자동차에서 가끔 볼 수있는 범퍼 스티커의 패러디입니다.
(rplacd a (car a))
는 분명히 그렇지 않을 것입니다. :) Common LISP는 Haskell이 아닙니다. 그러나 설명해 주셔서 감사합니다. +1.
car
is first
" 는 어때요 ? :)
예, 확실히 괴짜 농담입니다.
이름은 IBM 704에서 따 왔지만 농담이 아닙니다.
농담은 "내 다른 차는 ___"에 대한 (나쁜) 말장난입니다. 그러나 농담은 재귀에 관한 것입니다.
루프 / 조작 / 선택 / 호출 / 추가 작업을 수행 할 때 car (목록의 첫 번째 요소)와 cdr (나머지 목록)의 조합을 사용하여 기능을 저글링합니다.
그래서 당신은 차를 가지고 있지만 다른 차는 당신의 cdr입니다. 알 겠어요? 아직 웃어?
실제로 조금 웃거나 말거나하기 위해서는 lisp를 배워야 할 것입니다. 물론, 그때 쯤이면 다음과 같은 이유로 명백한 이유없이 무작위로 웃을 것입니다.
Lisp는 당신을 멍청하게 만듭니다.
// Coming from Scheme
Scheme에는 데이터 구조가 거의 없으며 그중 하나는 튜플 '(first . second)
입니다. 이 경우 car
는 첫 번째 요소이고 cdr
두 번째 요소 입니다. 이 구성을 확장하여 목록, 트리 및 기타 구조를 만들 수 있습니다.
농담은별로 재미 없어요.
(first . second)
. 목록 '(first second)
은 다음과 같이 두 개의 튜플로 구성됩니다.(cons first (cons second null))