标签: logic-programming

前言:失败驱动循环

我使用以下失败驱动循环来列出所有内容,而无需使用分号。

happiness(fred,5).
happiness(john,3).
happiness(grace,2).

someGoal(X) :-
        happiness(X,Y), write(Y), tab(4), fail.
Run Code Online (Sandbox Code Playgroud)

在查询模式下,我得到了预期的结果

?- someGoal(_).
5    3    2 
Run Code Online (Sandbox Code Playgroud)

如何将这些数字插入列表中,而不是将它们写到屏幕上?someGoal由于回溯似乎是隐式的,因此我无法在内部进行处理。

prolog logic-programming prolog-setof

4
推荐指数
2
解决办法
1371
查看次数

任何允许左递归的Prolog实现?

我想知道是否有任何Prolog实现允许在子句中进行左递归.我的直觉是,如果实现使用广度优先目标搜索,它可能支持左递归.但我不太确定.请注意,我并不关心效率.

prolog logic-programming

4
推荐指数
1
解决办法
173
查看次数

在 core.logic Clojure (CLP) Cryptoarithmetic 中使用 apply

(ns verbal-arithmetic
  (:require
    [clojure.core.logic :refer [all run* everyg lvar == membero fresh conde succeed fail conso resto]]
    [clojure.core.logic.fd :as fd]))

(comment
  "Solving cryptarithmetic puzzle"
  " SEND
  + MORE
  ______
   MONEY")


(defn send-more-money-solutions []
  (run* [s e n d m o r y]
        (fd/in s e n d m o r y (fd/interval 0 9))
        (fd/!= s 0)
        (fd/!= m 0)
        (fd/distinct [s e n d m o r y])
        (fd/eq (= (apply + [(* 1000 s) (* 100 e) (* …
Run Code Online (Sandbox Code Playgroud)

clojure logic-programming clojure-core.logic clpfd cryptarithmetic-puzzle

4
推荐指数
1
解决办法
212
查看次数

prolog解析如何使用反证法?

我正在学习 prolog,我对 prolog 使用矛盾证明的说法感到困惑:

解析证明过程利用了一种被称为“归谬法”的技术:假设要证明的公式是假的,并证明这会导致矛盾,从而证明要证明的公式实际上是正确的。

他们展示了以下证明图(基于前面一节建立的规则和事实):

证明图

但如果我倒着读这些步骤,那就是一个简单直接的证明:

/* axiom: tottenham_court_road is connected to leicester_square by northern road */
connected(tottenham_court_road, leicester_square, northern)

/* therefore it's connected to something on some road */
connected(tottenham_court_road, W, L)

/* being connected to something also means it's nearby */
nearby(X,Y):-connected(X,Y,L)

/* Therefore tottenham_court_road is near something */
nearby(tottenham_court_road, W)
Run Code Online (Sandbox Code Playgroud)

这是如何用反证法证明的呢?为什么这是一个比公理链式推理更有用的框架?

proof prolog logic-programming

4
推荐指数
1
解决办法
347
查看次数

在Prolog中使用集合进行约束逻辑编程

clpfd是SWI Prolog中整数的约束编程库.集合中是否有类似的库?如果没有,你知道任何有用的文章来实现这样的库吗?

它可行吗?我正在寻找任何形式的输入,因为我的谷歌搜索没有引起任何兴趣.

编辑:搜索时使用引号可以获得更好的结果(doh!).嗯...很高兴收到反馈意见.

编辑:有一个包含B-Prolog(clpset)的库正是这样做的.

set prolog logic-programming constraint-programming

3
推荐指数
1
解决办法
205
查看次数

正则表达式是逻辑编程的一个例子吗?

我只是想知道正则表达式是否符合逻辑编程的定义。它是一组规则,给定一组事实,根据查询的方式产生结果。对我来说,这听起来应该属于逻辑编程,但我不确定。

谢谢!

regex prolog logic-programming

3
推荐指数
1
解决办法
355
查看次数

我该如何处理Prolog

我在大学读了Prolog课程.课程要求我们编写prolog程序.我能够编写简单的程序,但是我发现很难消化复杂的程序.任何建议如何进行或如何研究这个主题?解决这种问题的方法是什么?任何帮助赞赏.谢谢.

prolog logic-programming clpfd

3
推荐指数
1
解决办法
556
查看次数

python 逻辑编程

我正在做一个主要基于逻辑编程的项目。我已经预先定义了程序用来计算概率的相关规则和事实,然后将这些概率附加到数据中并输入到进一步的机器学习模型中。计算概率的程序可以在序言中轻松定义,例如:

has_lot_work(daniel, 8). %number of lets say urgent tasks
has_lot_work(david, 3).
stress(X, P) :- has_lot_work(X, P2), P is P2 / 100.
to_smoke(X, Prob) :- stress(X, P1), friends(Y, X), influences(Y, X, P2), smokes(Y), Prob is P1 + P2.
to_have_asthma(X, 0.3) :- smokes(X). %30 percent of current smokers get asthma
to_have_asthma(X, Prob) :- to_smoke(X, P2), Prob is P2 * 0.25. %25 percent of smokers-to-be will get asthma
friends(X, Y) :- friend(X, Y).
friends(X, Y) :- friend(Y, X).
influences(X, Y, 0.4) :- friends(X, …
Run Code Online (Sandbox Code Playgroud)

python prolog logic-programming

3
推荐指数
2
解决办法
1万
查看次数

clp(Z) 与 Kiselyov 关系算术

我正在努力理解 clp(Z) 和MiniKanren 中使用的另一个关系算术系统之间的功能差异。

特别是,clp(Z) 显然适用于有界域,而 Kiselyov等人。被描述为适用于无界字段。

我尝试使用与无穷大和不确定性相关的各种边缘情况,但除了 Kiselyov等人之外,我无法找到明显的差异。显然不支持区间和负数。

Kiselyov 系统的要点/优点是什么?主要是实现更简单,还是还有更多?

logic-programming constraint-programming minikanren clpz

3
推荐指数
1
解决办法
192
查看次数

?序言拒绝假设推理查询?

我怀疑 ?Prolog 的主要实现 teyjus 可能有点被遗弃,但是 ?Prolog 是一个迷人的 Prolog,它应该让你使用高阶逻辑、假设推理和其他东西,这就是为什么我尝试使用它。

文件“example.sig”:

sig example.

kind person, language type.

type hans person.
type german, french, italian language.

type grade person -> o.
type take person -> language -> o.
Run Code Online (Sandbox Code Playgroud)

文件“example.mod”:

module example.

(grade P) :- (take P german), (take P french).
(grade P) :- (take P german), (take P italian).

take hans french.
Run Code Online (Sandbox Code Playgroud)

但是,当我编译和加载它时,虽然它似乎可以工作,但假设的推理查询被拒绝:

[example] ?- take X Y.

The answer substitution:
Y = french
X = hans

More solutions (y/n)? y

no (more) …
Run Code Online (Sandbox Code Playgroud)

prolog logic-programming lambda-prolog

3
推荐指数
1
解决办法
127
查看次数