2024年Clojure状态调查!分享您的看法。

欢迎!请查看关于页面以了解更多关于如何工作的信息。

0
core.logic
您好!我有一个关于文档改进的小建议

当使用常规`defn`创建关系时,我发现在您的`defn`ed关系内部使用多个关系和目标时,需要一个空{{(fresh [] ...)}},否则您在`defn`的隐含do中的目标没有效果,只有最后一个有作用。

简单示例

{{
defn-logic> (defn test [a b]
              (== a 1)
              (== b 2))
#'defn-logic/test
defn-logic> (run* [q] (fresh [a b]
                        (== q [a b])
                        (test a b)))
([_0 2])
defn-logic> (defn test [a b]
              (fresh []
               (== a 1)
              (== b 2)))
#'defn-logic/test
defn-logic> (run* [q] (fresh [a b]
                        (== q [a b])
                        (test a b)))
([1 2])
defn-logic>
}}

再次强调,这是完全正确和合理的,但对初学者来说可能有些令人困惑,因为在隐含do中的“失败是沉默的”。这里我可能只是想提醒一下维基文档。我没有找到它,但它可能已经存在了?我很乐意将其添加到文档中并发送PR。

3个答案

0

评论者:owickstrom

REPL会话出了问题,现在作为文件附加。

0

评论者:owickstrom

哦,我发现 all (https://docs.clojure.org/clojure.core.logic/all) 似乎比 (fresh (link: ) ...) 更受欢迎。

0
参考: https://clojure.atlassian.net/browse/LOGIC-179(由 owickstrom 报告)
...