3

データ構造としてマップを使用しようとしていますが、マップを初期化して、lvars後で他のリレーションから値を割り当てるようにしています。

これは成功します:

(run 1 [q]
  (fresh [a b]
    (== q {:a 1 :b 2 :c b})
    (featurec q {:a b})))
-> ({:a 1, :b 2, :c 1})

しかし、これらは失敗します:

;; Expected result -> ({:a 1 :b 2 :c _0})
(run 1 [q]
  (fresh [a b]
    (== q {:a a :b 2 :c b})
    (featurec q {:a 1})))
-> java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IPersistentMap

;; Expected result -> ({:a _0 :b 2 :c _0})
(run 1 [q]
  (fresh [a b]
    (== q {:a a :b 2 :c b})
    (featurec q {:a b})))
-> java.lang.ClassCastException: clojure.core.logic.LVar cannot be cast to clojure.lang.IPersistentMap

を使用して[org.clojure/core.logic "0.8.5"]います。どうすれば両方の目標を成功させることができますか?

4

1 に答える 1

1

これはpartial-map( http://dev.clojure.org/jira/browse/LOGIC-145 ) のバグによるものです。

于 2014-02-03T03:34:10.487 に答える