gpt4 book ai didi

clojure - 如何在 core.logic 中编写自己的简单约束函数?

转载 作者:行者123 更新时间:2023-12-02 09:14:50 24 4
gpt4 key购买 nike

我刚刚读了primer对于核心逻辑。到目前为止这是有道理的,但我不知道去哪里了解更多信息。

假设我想编写自己的约束,有点像底漆中显示的 membero。这个称为 vectoro 并将事物限制为向量。

(defn vectoro [s] ???)

(run* [q]
(conde
[(== q [1 2])]
[(== q :a)])
(vectoro q))

现在我希望返回[1 2]。如何编写向量?这是否记录在任何地方?

最佳答案

有一个 core.logic pred使这变得容易的宏:

(run* [q]
(== q [1 2])
(pred q vector?))
=> ([1 2])

(run* [q]
(== q '(1 2))
(pred q vector?))
=> ()

以下是定义 vectoro 函数/约束的方法(但要意识到这是 essentially the exact same thing pred is doing ):

(defn vectoro [a]
(project [a]
(== true (vector? a))))

project 用于对逻辑变量 (LVar) 的实际/具体进行操作。然后,我们可以使用普通的旧谓词 vector? 并要求结果为 true。这也适用于您的示例程序:

(run* [q]
(conde
[(== q [1 2])]
[(== q :a)])
(vectoro q))
=> ([1 2])

(run* [q]
(conde
[(== q '(1 2))]
[(== q :a)])
(vectoro q))
=> ()

关于clojure - 如何在 core.logic 中编写自己的简单约束函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48157188/

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