gpt4 book ai didi

clojure - 在 clojure.core.logic 中编码 "two out of three"

转载 作者:行者123 更新时间:2023-12-02 15:04:19 25 4
gpt4 key购买 nike

我需要编写一些 core.logic 代码来检查三个目标中的两个是否成功。

我知道我可以这样写:

(run* [a b c]
(conde [goal1 goal2]
[goal2 goal3]
[goal3 goal1]))

...但这很麻烦,而且我实际上需要针对“N out M”情况泛化我的代码,而这将很难泛化。有人可以指出我解决此类问题的正确方法吗?有没有可用的函数可以简化此操作?

谢谢!

最佳答案

也许宏可以提供帮助:

(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]))

组合来自math.combinatorics

关于clojure - 在 clojure.core.logic 中编码 "two out of three",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19414335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com