我需要编写一些core.logic代码来检查三个目标中的两个是否成功。
我知道我可以这样写:
(run* [a b c]
(conde [goal1 goal2]
[goal2 goal3]
[goal3 goal1]))
...但这很麻烦,我实际上需要将我的代码概括为“N out of M”的情况,这很难概括。有人能指出我使用这种问题的正确方法吗?是否有可用的功能简化了这个?
谢谢!
答案 0 :(得分:1)
宏可能会有所帮助:
(defmacro n-of-m-goals [n all-goals]
`(conde ~@(combinations all-goals n))
然后你的例子将成为:
(run* [a b c]
(n-of-m-goals 2 [goal1 goal2 goal3]))