90

Lisp に精通した誰かがこのジョークを説明してくれますか? 私は関数型プログラミング言語についていくつか読んだことがあり、CAR/CDR がアドレス/デクリメント レジスタの内容を意味することを知っていますが、まだユーモアを本当に理解していません。

4

3 に答える 3

137

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

このジョークは、ボロボロの古い車に時々見られるバンパー ステッカーのパロディーで、「私のもう 1 台の車はポルシェ/BMW などです」と書かれています。

このジョークに対する私の反応は、常に「私のもう 1 つの CAR は CADR です。CDR はまったく CAR ではありません」というものでした。

于 2009-12-08T05:45:22.493 に答える
34

はい、間違いなくオタクの冗談です。

名前は IBM 704 に由来しますが、冗談ではありません。

冗談は、「私の他の車は___です」という(悪い)駄洒落です。しかし、冗談は再帰に関するものです。

Lisp で loop/manipulate/select/invoke/more を実行するときは、 car (リストの最初の要素) と cdr (リストの残りの要素) を組み合わせて関数をジャグリングします。

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

実際に少しくすくす笑うには、おそらく Lisp を学ばなければならないでしょう。もちろん、その時までには、明白な理由もなく思わず笑ってしまうことでしょう。理由は次のとおりです。

Lisp は頭がおかしくなります。

于 2009-12-08T06:05:40.023 に答える
14

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

于 2009-12-08T05:30:30.080 に答える