web-dev-qa-db-ja.com

「私の他の車はcdr」とはどういう意味ですか?

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

88
CaptainCasey

LISPでは、リンクリスト要素はCONSと呼ばれます。これは、歴史的な理由からCARとCDRと呼ばれる2つの要素を持つデータ構造です。 (一部の一般的なLISPプログラマーは、FIRSTおよびREST関数を使用して参照することを好みますが、CARやCDRなどは、(CADR x)≡(CAR( CDR x))。

ジョークは、「私の他の車はポルシェ/ BMW /などです」と言って、時折ビートアップされた古い車に見られるバンパーステッカーのパロディです。

このジョークに対する私の response は、「他のCARはCADRです。CDRはCARではありません。」でした。

132
Peter S. Housel

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

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

冗談は(悪い)「私の他の車は___です」にしゃがれています。しかし、冗談は再帰についてです。

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

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

おそらく、実際に少し笑うかどうかに合わせて、LISPを学習する必要があります。もちろん、その時までに、明白な理由もなくランダムに笑っていることに気付くでしょう。

LISPはあなたをループさせます。

32
zen

//スキームから来る
Schemeのデータ構造は非常に少なく、その1つはタプルです:'(first . second)。この場合、carが最初の要素であり、cdrが2番目の要素です。この構造は、リスト、ツリー、およびその他の構造を作成するために拡張できます。
ジョークはあまり面白くない。

14
Kobi