对于 core.logic,非关系在实践中意味着什么?
What does non-relational mean in practice for core.logic?
在尝试通过 API 文档理解 core.logic 时,我遇到了非关系目标和关系目标。我不知道这在实践中意味着什么,也不知道为什么注释目标是否相关很重要。
您能否举例说明目标的使用方式有何不同,具体取决于它们是否相关?
为了解释非关系的含义,我们需要重新审视 relational
的含义。
如果你考虑函数式编程中的纯函数,它们总是 return 一个值,并且对于相同的输入参数,相同的输出值是 returned.
比如说:
f(x) = x + 2
此函数总是 returns 5
输入值 3
。
但是有很多情况是函数不合适,作为平方根,有 2 个结果。
sqrt(4) => 2 and -2
或者将一个数字除以零,没有结果
将关系视为广义函数,您有:
- 任意数量的结果(零个或多个)
- 不确定性
- in/out 每次调用的参数可以不同
- 关系 return true 如果关系为真,false 否则。
为了将函数转换为关系,我们将结果设置为新参数:
(cons 1 [2]) => [1 2]
(conso 1 [2] [1 2]) => true
但现在 conso
可以用作生成器,如果一个参数是变量的话:
(run 1 [x]
(conso 1 [2] x)) => ([1 2])
(run 1 [x]
(conso 1 x [1 2])) => ([2])
在逻辑编程中统一回答了以下问题:满足这种关系的世界应该是什么样子?
A non-relational
运算符或函数是不作为关系而是作为简单函数的运算符,因此不可能将任何参数作为变量进行统一。
在命名空间 clojure.core.logic.fd
.
中引入有限域上的 CLP
之前,例如 >
和 <
等运算符就发生了这种情况
您可以在 Ambrose Bonnaire-Sergeant 的 this talk 中找到此处的许多概念。
在尝试通过 API 文档理解 core.logic 时,我遇到了非关系目标和关系目标。我不知道这在实践中意味着什么,也不知道为什么注释目标是否相关很重要。
您能否举例说明目标的使用方式有何不同,具体取决于它们是否相关?
为了解释非关系的含义,我们需要重新审视 relational
的含义。
如果你考虑函数式编程中的纯函数,它们总是 return 一个值,并且对于相同的输入参数,相同的输出值是 returned.
比如说:
f(x) = x + 2
此函数总是 returns 5
输入值 3
。
但是有很多情况是函数不合适,作为平方根,有 2 个结果。
sqrt(4) => 2 and -2
或者将一个数字除以零,没有结果
将关系视为广义函数,您有:
- 任意数量的结果(零个或多个)
- 不确定性
- in/out 每次调用的参数可以不同
- 关系 return true 如果关系为真,false 否则。
为了将函数转换为关系,我们将结果设置为新参数:
(cons 1 [2]) => [1 2]
(conso 1 [2] [1 2]) => true
但现在 conso
可以用作生成器,如果一个参数是变量的话:
(run 1 [x]
(conso 1 [2] x)) => ([1 2])
(run 1 [x]
(conso 1 x [1 2])) => ([2])
在逻辑编程中统一回答了以下问题:满足这种关系的世界应该是什么样子?
A non-relational
运算符或函数是不作为关系而是作为简单函数的运算符,因此不可能将任何参数作为变量进行统一。
在命名空间 clojure.core.logic.fd
.
CLP
之前,例如 >
和 <
等运算符就发生了这种情况
您可以在 Ambrose Bonnaire-Sergeant 的 this talk 中找到此处的许多概念。