如何匹配包含 lvar 的地图?
Posted
技术标签:
【中文标题】如何匹配包含 lvar 的地图?【英文标题】:How to match a map that contains lvars? 【发布时间】:2014-02-25 19:52:11 【问题描述】:我正在尝试使用地图作为我的数据结构,并初始化它们以包含 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"]
。我怎样才能使这两个目标都成功?
【问题讨论】:
【参考方案1】:这是由于partial-map
(http://dev.clojure.org/jira/browse/LOGIC-145) 中的错误造成的。
【讨论】:
非常感谢。好像它是在 11 月 25 日合并的,但从那以后就没有新版本了。以上是关于如何匹配包含 lvar 的地图?的主要内容,如果未能解决你的问题,请参考以下文章
core.logic lvars 上的算术和 clojure 函数
收藏 如何利用Google地图的API匹配2条路径是不是部分重合?