【发布时间】:2020-05-02 22:09:36
【问题描述】:
我最近一直在玩 Prolog,并开始思考如何表示我想用它完成的一些任务,这主要是关于拥有一个事实数据库并对其进行简单查询,将多个事实连接在一起。
但我想在我正在编写 Clojure 的上下文中使用它。似乎core.logic 应该做我想做的事。
但我天真地发现如何将基本的 Prolog 谓词放入 core.logic 中很困难。
例如,我应该如何在 core.logic 中表示像这样简单的东西:
person(phil).
person(mike).
food(cheese).
food(apple).
likes(phil,apple).
likes(phil,cheese).
还有一个类似的查询
food(F),person(P),likes(P,F)
我能找到的大多数介绍都侧重于逻辑编程,而不是数据表示。
【问题讨论】:
-
好的,那么使用 db-rel 和 db?
-
有没有类似 Prolog 的同时定义关系和数据的东西?
-
糟糕。忘了说我从来没有使用过 Clojure。我正在写一个答案,事实看起来很简单,但是这个查询让我对如何转换为 core.logic 感到困惑,所以我不会发布答案。
-
还注意到
core.logic是基于minikanren 可能有用的。
标签: prolog clojure-core.logic minikanren