相关疑难解决方法(0)

可逆的"二进制到数字"谓词

将二进制位(例如,可能是0/1的列表)以可逆方式转换为数字的最佳方法是什么.我在swi中编写了一个原生谓词,但有更好的解决方案吗?最好的祝福

prolog clpfd

9
推荐指数
2
解决办法
1672
查看次数

prolog中的守卫条款?

它们存在吗?他们是如何实施的?

所述coroutining SWI-Prolog的(的谓词freeze,when,dif等)具有的功能警卫.它们如何适合首选的Prolog编程风格?

我是很新的逻辑编程(有序言和共)和事实,即它不是纯粹的声明,并要求即使在非常简单的情况下程序上的考虑有点困惑(见本关于使用问题\==dif).我错过了重要的事吗?

prolog guard-clause prolog-dif prolog-coroutining

9
推荐指数
1
解决办法
932
查看次数

Prolog的纯度谓词使用不纯的原语

我知道这一点var/1,nonvar/1并且!/0是不纯的基元,但它们的使用是否会使每个使用它们的程序都不纯净?

我写了下面的谓词plus/3,表现得好像是纯粹的,或者至少是我声称的那样.谓词是示范性的,不是为了提高效率.

% nat(X) is true if X is a natural number

nat(0).
nat(X):- nonvar(X), !, X > 0.
nat(X):- nat(X1), X is X1 + 1.

% plus(A, B, C) is true if A,B and C are natural numbers and A+B=C

plus(A, B, C):-
    nat(A),
    (nonvar(C), C < A, !, false ; true),
    plus_(B, A, C).

plus_(A, B, C):-
    nat(A),
    (nonvar(C), C < A, !, false ; true),
    C1 is …
Run Code Online (Sandbox Code Playgroud)

prolog logic-programming logical-purity

8
推荐指数
2
解决办法
337
查看次数