11

一部の core.logic コンストラクト ( matchamatchematchu、 ) はdefnefneパターン マッチング式を本体として使用し、次のように使用できます。

(run* [q]
  (fresh [a o]
    (== a [1 2 3 4 5])
    (matche [a]
            ([ [1 2 . [3 4 5] ]]
             (== q "first"))
            ([ [1 2 3 . [4 5] ]]
             (== q "second"))
            ([ [1 . _] ]
             (== q "third")))))
;=> ("first" 
;    "second"
;    "third")

( Logic-Starter wiki の例)

しかし、core.logic のドキュメントにパターン マッチングの構文の仕様が見つかりません。この構文は何ですか? 多分私はいくつかのミニカンレンのドキュメントや本でそれを見つけることができますか?

  • 接頭辞が付いた変数と接頭辞が付いていない一致した変数の違いは何?ですか?
  • リストに加えて、他の破壊構造はありますか( clojure.と同様)?&
  • [_ _]2 つの要素を持つシーケンスのみに一致しますか?
  • 地図を破壊することは可能ですか?
4

1 に答える 1

2

ここで答えられるように最善を尽くします。Ambrose Bonnaire-Sergeant's notesの Intelは、この件に関する実際の文書を見つけた唯一の場所です。私の疑いでは、多くの構文が基になっている研究論文に埋もれている可能性がありますcore.logicが、それらは 270 ページの論文であるため、それらが大きな参考になるとは思いませんでした。

で始まる一致した変数の違いは何ですか? そしてそれなしで?

? で始まる変数 への引数として宣言する必要はなく、暗黙的に宣言freshされます。他のすべての点で、それらは同じように動作します。

を含むリストに加えて、他の破壊構造はありますか? (clojure の & に似ています)?

いいえ、破壊のための魔法の構文の欠けている部分は他にありません。

[_ _] は 2 つの要素を持つシーケンスのみに一致しますか?

はい。

地図を破壊することは可能ですか?

あまり。ここで読むことができるテーマに関する優れた長文の記事がありますが、本質的にマップとマップのような構造は、理論的基盤を提供するソルバーとその同類の焦点の対象ではありませんでしたcore.logic。マップでの論理解決に興味がある場合、おそらく自由に使える最適なツールはfeaturecです。ドキュメントを引用するには:

(featurec x fs)

マップに少なくともキーと値のペアが含まれていることを確認してくださいfsfs部分的にインスタンス化する必要があります。つまり、機能抽出をサポートする論理変数である値を含めることができます。

于 2018-04-26T12:09:08.513 に答える