2

私は2つのアイテムを持っています。最初の はa-child、最初の要素として配列を含み、残りの要素としていくつかの文字列を含むリストです。もう 1 つmappedは、多数の配列を含むリストです。調べると、それが にあるのは簡単にわかりますa-childmapped、それを見つける関数は見つかりません。

以下の Lisp スタイルが悪いことをお詫びします。数日前に始めたので、まだすべての規則を理解していません。

(defparameter a-child (list (#2A((1 2 3) (7 4 5) (9 8 6))) "U" "R" "R"))
(defparameter mapped (list (#2A((1 2 3) (7 4 5) (9 8 6))) (#2A((1 2 3) (4 5 6) (7 8 9)))))
(find (car a-child) mapped)   ;;returns NIL
(member (car a-child) mapped) ;;returns NIL
(position (car a-child) mapped) ;;returns NIL
(equalp (car a-child) (car mapped)) ;;returns T

配列のリスト内で配列を検索するには、どの関数を使用できますか?? ありがとうございました。

4

1 に答える 1

9

答え

「NILを返す」とマークされたシーケンス関数は、それらTに渡すと返さ:test #'equalpれます。

理由

Common Lispのデフォルトの2 引数テストeqlは です。

これは、ANSI CL 標準で提供されている 4(!) 個の汎用比較関数の中から最も合理的な選択です。

  • eq実装に依存しすぎて、おそらく数字や文字で望むようには機能しません

  • equalオブジェクトをequalpトラバースするため、巨大なオブジェクトの場合は時間がかかり、円形のオブジェクトの場合は終了しない場合があります。

Common Lisp の eq、eql、equal、および equalp の違いも参照してください。

于 2013-10-10T12:47:48.537 に答える