clojure - 在core.logic中合成满足特征约束的最小地图?
问题描述
在core.logic
中,有没有办法翻译程序的输出,例如
(run 2 [q]
(fresh [a]
(featurec q {:foo a})
(membero a '(5))
(conde
((featurec q {:bar 2}))
((featurec q {:baz 2})))))
进入满足每个解决方案约束的最小映射,在这种情况下{:foo 5, :bar 2}
和{:foo 5, :baz 2}
?
解决方案
你可以试试这个,这有点复杂,但它确实有效。
(->> (run 1 [q]
(fresh [l1 l2 a]
(membero a '(5))
(emptyo l1)
(conso [:foo a] l1 l2)
(conso [:bar 2] l2 q)))
(first)
(into {}))
或者
(run 1 [q]
(fresh [a B]
(membero a '(5))
(== B 2)
(== q {:foo a :bar B})))
我相信威廉·伯德可以做得更好。
推荐阅读
- flutter - Flutter - 如何按比例居中视图(以乘数偏移为中心)
- jsf - Primefaces 对未处理的 FacesMessages 咆哮
- java - 通过强制控制密码历史记录更改 AD 上的密码时出现错误
- ios - 将录制的视频保存到照片库 - 无法将“URL”类型的值转换为预期的参数类型“字符串”
- cloudera - 安装 Impala 是否需要 Cloudera Navigator Key Trustee Server、Cloudera Navigator Key HSM、Cloudera Navigator Key Trustee KMS?
- node.js - 节点模块未使用足够的 CPU 资源
- github - 无法通过代理连接到 GitHub
- c# - DataContractSerializer - 如何使用 ElementName 而不是属性名称来序列化对象?
- tfs - 签入时从 TFS(Team Foundation Server)更新 AssemblyInfo.cs 版本
- uwp - 通用平台如何绑定 Grid ColumnDefinition.Width?