2024年Clojure调查!中分享您的想法。

欢迎!请查看关于页面,了解更多关于这个工作方式的信息。

0
core.logic
嗨!我有一个小小的文档改进建议

当使用常规 `defn` 创建关系时,如果要在定义好的关系中同时使用多个关系和目标,我发现需要一个空的 {{(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 "静默失败"。我这里可能只是想要在 Wiki 文档中提醒一下。我没有找到它,但它可能已经存在了?我会很高兴将其添加到文档中并发送一个 PR。

3 答案

0

由:wickstrom发表评论

REPL会话弄乱了,现在作为文件附加。

0

由:wickstrom发表评论

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

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