MiniKanren 有“not”运算符吗?
例如,如何表示 Prolog 的
a :- b, not(c)
a
如果b
为真c
且不为真则为真(Prolog 使用否定作为失败,即 not(c)
如果c
无法证明则认为已证明)
Prolognot
也适用于非地面表达式,例如
a(X, d(Y)) :- b(d(X), d(Y)), not(c(d(X)))
MiniKanren 有“not”运算符吗?
例如,如何表示 Prolog 的
a :- b, not(c)
a
如果b
为真c
且不为真则为真(Prolog 使用否定作为失败,即 not(c)
如果c
无法证明则认为已证明)
Prolognot
也适用于非地面表达式,例如
a(X, d(Y)) :- b(d(X), d(Y)), not(c(d(X)))
根据https://github.com/zhjhxxxjh/ykanren,答案是否定的。
minikanren中没有not
运算符,但您可以通过以下方式实现类似的操作conda
:
(defmacro not
"fail if the given goal succeeds, use with extreme caution"
[goal]
`(conda
[~goal fail]
[succeed]))
在 Google 网上论坛上查看我的类似问题