「my other car is a cdr」とはどういう意味ですか?


89

LISPに精通している人なら誰でもこの冗談を私に説明できますか?私は関数型プログラミング言語についていくつか読んだことがありますが、CAR / CDRがアドレス/デクリメントレジスタの内容を意味することを知っていますが、それでもユーモアがよくわかりません。


10
少し考えてみれば理解できるでしょう。ははは。「このプログラマーはすべてのガベージコレクションで停止する」と書かれたバンパーステッカーよりも優れています。
ゴンゾブレーン

8
この質問がnews.ycombinator.com/item?id=14416846からリンクされてから約30分後に保留になりました。8年前の質問です。うるさく、私は保留状態に反論することはできませんが、私は保留にそれを置くの雰囲気好きではない
i336_

@ i336_ メタディスカッションごとに、新しい回答がレビューキューに詰まるのを防ぐためにクローズされます。
Andrew

2
他に保留の理由はありませんか?意見ベースは間違っている
Entendu

6
代わりに保護されるべきではありませんか?
フェデリコクレズカロカ2017年

回答:


134

Lispでは、リンクされたリスト要素はCONSと呼ばれています。これは、歴史的な理由でCARとCDRと呼ばれる2つの要素を持つデータ構造です。(一部のCommon Lispプログラマーは、FIRST関数とREST関数を使用してそれらを参照することを好む一方で、CARやCDRのような他のプログラマーは、(CADR x)≡(CAR(CDR x))などの構成済みバージョンによく適合します。

冗談は、「私のもう1台の車はポルシェ/ BMW /その他です」と言って、ときどき古い車に見られるバンパーステッカーのパロディです。

この冗談に対する私の返答は、「他のCARはCADRです。CDRはCARではありません」でした。


1
とてもいいですが、本当ではありません。(rplacd a (car a))それが明らかにしない後ではありません。:) Common LISPはHaskellではありません。しかし、説明をありがとう。+1。
Will Ness

2
私の冗談は説明したくありませんでしたが、重要なのは、CDR 操作はCAR 操作ではないということです。これは、RPLACDなどで値が等しいかどうかとは別の問題です。
Peter S. Housel 14

1
また、CDRはスポーツカーの名前のような音で、TVRやGT-Rを反映しているため、テキストを読んでも、より深いLISP-yの意味を理解することさえできません。
grkvlt

4
誰かが知りたい場合に備えて、CARはレジスタ番号のアドレス部分の内容の略であり、CDRはレジスタ番号のデクリメント部分の内容の略です。ありがとう、ウィキペディア
kojiro

1
「私のもう一人carfirst」はどうですか。:)
Kaz

34

はい、間違いなくオタクのジョークです。

名前はIBM 704から来ていますが、それは冗談ではありません。

冗談は、「私の他の車は___だ」という(悪い)冗談です。しかし、冗談は再帰についてです。

lispでループ、操作、選択、呼び出し、その他を行う場合、car(リストの最初の要素)とcdr(リストの残りの要素)の組み合わせを使用して関数を操作します。

だからあなたは車を持っていますが、cdrは常に(再帰的に)より多くの要素なので、あなたは常にcdrから車を得ることができるので、あなたの他の車はあなたのcdrです。それを得る?もう笑う?

あなたはおそらく実際に少し笑うためにlispを学ばなければならないでしょう。もちろん、そのときまでに、明らかな理由もなくランダムに笑っていることに気付くでしょう。

Lispはあなたを大げさにします。


2
そして、あなたの最後の息で、別のゲームが始まりました。
zxq9 2014年

14

// Schemeから来る
Schemeにはデータ構造がほとんどありません'(first . second)。そのうちの1つはタプルです:。この場合、carは最初の要素で、cdrは2番目の要素です。この構成を拡張して、リスト、ツリー、およびその他の構造を作成できます。
冗談はあまり面白くない。


1
タプルは '(first。second)ではないでしょうか?
Ken

1
@ケン-繰り返しますが、lispはわかりませんが、schemeにはそのような複雑な構文はありません。リストもペアでできています。
Kobi

3
実際、タプルはであると言う方が正確です(first . second)。リストは'(first second)このように、2つのタプルで作られて(cons first (cons second null))
MQP

1
コビ:Lispは知っていますが、「複雑な構文」の意味がわかりません。点線の構文は、Schemeを含むLispでペアを記述する方法です:gnu.org/software/mit-scheme/documentation/mit-scheme-ref/…。(first second)のcdrは(second)であり、secondではありません。
ケン

2
それで、今、私たちは修正されたことに対して反対票を投じていますか?しかたがない。太陽が輝きます。
コビ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.