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

评论人:owickstrom

REPL会话出错,现在将其作为文件附加。

0

评论人:owickstrom

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

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