5

これは、本や記事で読んだ例でよく見られます。

(caddr *something*)

または、c***r コマンドの多くのバリアント。

より明確に物事を引き出すことができるとき、それは私には少しばかげているようですelt:

(elt *something* 2)

しかし、この技術はあまり使われていないと思います。

c***r 関数を好む、私が理解していない規則はありますか?

4

2 に答える 2

5

eltリストと配列の両方で機能する汎用関数です。両方のデータ型で同じように機能する汎用アルゴリズムを作成する場合に必要です。しかし、これは通常リストに不利になるため、そのようなアルゴリズムは多くありません。

一般的な規則は次のようです。

  • リストを操作する汎用関数を作成する場合は、c(a|d)+r関数を使用します (ほとんどの場合、そのためのライブラリ関数があるため、これらのケースは非常にまれです)。これは通常、Stackoverflowの質問コード/クラス割り当てのコードなどで発生します:)

  • ベテランの Lisp プログラマーは、可能であればfirst、などを使用します。secondこれは、ベスト プラクティスでも言及されることがあります。ベスト プラクティスでは通常、重要なリストを処理するのではなく、適切なデータ構造を作成する必要があることも言及されています。

  • nthまたはelt、それらの適切なユースケースを考えるのが難しいため、実際にはまれです。パフォーマンスが重要ではないマクロで両方をどのように使用できるか想像できますが、たとえば、誰かが文字列と文字のリストを同じ方法で処理したい場合など、ある種の一般性が望ましいです。たぶん、プロトタイピング コードで、プログラマーがどのデータ型を使用するのかまだ確信が持てない場合ですが、それだけです。

于 2013-11-14T07:22:19.827 に答える