首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >miniKanren (logpy或其他人)如何断言一个事实是真实的?

miniKanren (logpy或其他人)如何断言一个事实是真实的?
EN

Stack Overflow用户
提问于 2019-11-30 11:57:35
回答 1查看 287关注 0票数 0

我正在做一个练习,用几个不同的习语写一些逻辑代码.miniKanren,ASP等.对每个人都有感觉。

我有一个关于一些基本问题的问题:

在Prolog中,您可以定义:

代码语言:javascript
复制
human(bob).

然后,在REPL中,您可以检查这个事实和非事实的真相:

代码语言:javascript
复制
?- human(bob).
true.

?- human(e_t).
false.

在python miniKanren,LogPy中,您可以类似地定义以下事实:

代码语言:javascript
复制
from kanren import fact

fact(human, 'bob')

我找不到一个简单地检查“鲍勃是人”的真理的方法。

run函数似乎需要一个变量作为第二个arg,但我并不试图找到变量的值。

我找到的所有kanren示例都是从演示如何查询关系开始的,例如:

代码语言:javascript
复制
from kanren import Relation, fact, run, var

human = Relation()

fact(human, 'bob')
fact(human, 'jim')

x = var('x')

run(0, x, human(x))

# output:
('jim', 'bob')

这更有用,但我想做的比这更简单(只是为了比较Prolog中相同的初始步骤)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-30 12:02:48

所以..。在写这个问题的时候,我玩得更多了,找到了我想要做的事情的秘诀。

这在LogPy miniKanren中是可行的,我想知道类似的用法是否适用于其他实现,如Clojure core.logic等(或者是否还有其他方法!)。

代码语言:javascript
复制
from kanren import Relation, fact, run, var

human = Relation()

fact(human, 'bob')

run(0, True, human('bob'))
>>> (True,)

run(0, True, human('E.T.'))
>>> ()

我们可以使用任何替代True arg的方法:如果目标arg计算为true,那么您将在结果元组中获得您的值,否则将为空结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59115932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档