(A) と (B) をどのように関連づけることができるかわかりません。
(A) 一貫性を保つことです。つまり、同じデータ構造を使用してアプリケーションのさまざまなレイヤーでデータ (たとえば、マップに格納されているユーザー情報) を表すと、一貫性が保たれます。多くのデータ構造を使用して同じ情報を表す場合、構造をある形式から別の形式に変換するコードを記述する必要があります。また、異なる構造で機能するさまざまな関数は、異なるデータ構造を想定しているため、構成できません。
(B) これは、Clojure のさまざまな構造に関するものです。
defprotocol
: これはデータ構造に関するものではなく、コントラクト/インターフェイスに関するものです。つまり、特定の型がコントラクトを実装し、コントラクトを実装するためにコンシューマー関数が渡された型を必要とする任意のコンテキストで型を使用できます。例: コンソール (またはその他の書き込み可能な文字列) に出力できるタイプはすべて、印刷コントラクト/プロトコルを実装します。
defrecord
: マップを作成しますが、デフォルトの方法で実装されたいくつかの追加インターフェースを使用します。
deftype
: 型を作成するための低レベルの構造であるため、このために多くのコードを記述する必要があります。ほとんどの場合、これを使用する必要はありません。