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“静默失败”。我在这里寻找的可能只是对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 报告)
...