1

n変数が一連の値とは異なる値を取るという制約をどのように表現すればよいnですか?

たとえば、フォームの式を検索したいかもしれません

(op1 a (op2 b c))

op1 と op2 はそれぞれ* + - / exp?

aから値を取得する方法を確認できます(たとえば1 2 3、を使用して)。と についてもconde同じです。しかし、どうすれば平等を除外できますか? すべての組み合わせをループして明示的に除外する必要がありますか?bc

明らかに、「手動で」除外を行うことができますが、より良い(より効率的な)方法、またはこのようなものを含むサポートライブラリがあるかどうか疑問に思っています(線形プログラミングライブラリの経験がもう少しあり、通常はこれらの種類の一般的なケースに対処する一連のヘルパー関数)。

そして、いくつかの値が特定の回数出現する可能性がある場合にそれを一般化することは、ドラッグになるように思えます...

そして今考えてみると、どのように最大値を検索するのでしょうか? これに関する良い本やノートはありますか?!

[私は clojure を使用していますが、私の理解では、clojure-core.logic と minikanren はほとんど同じです]

更新:この質問を読んで良い紹介を探している人は、コメントで以下に言及しているAlvisの論文をチェックしてください。

4

1 に答える 1

2
(run* [q] 
  (fresh [a b c]
    (== q [a b c])
    (fresh [x y z]
      (rembero a '(* + / - exp) x)
      (rembero b x y)
      (rembero c y z))))
于 2012-08-03T20:14:22.027 に答える