首先,我对 prolog 完全陌生,我正在尝试编写一个谓词 length(M,X,N),如果 M 与 N 的差异大于 X,则该谓词为真。
我编写了以下测试用例,如果 M(=dec.5) 和 N(=dec.2) 的差异大于 X(=dec.2),则该测试用例为真。在这种情况下也是如此,因为 5 和 2 的差值 3 大于 2:
?- length(s(s(s(s(s(0))))), s(s(0)), s(s(0))).
true .
我知道 prolog 是递归工作的,所以我想知道我是否可以像在 C 语言中那样用条件(例如 <,>)构造这样的谓词,或者在 prolog 中是否有另一种方法可以做到这一点。很抱歉这个简单的问题,但我刚开始使用 prolog。
最佳答案
您可以为 greater 或 less 构造谓词。例如:
greater_than(s(_), 0).
greater_than(s(X), s(Y)) :-
greater_than(X, Y).
类似地:
less_than(0, s(_)).
less_than(s(X), s(Y)) :-
less_than(X, Y).
如果你想找到绝对差异,你可以这样做:
abs_diff(0, 0, 0).
abs_diff(s(X), 0, s(X)).
abs_diff(0, s(X), s(X)).
abs_diff(s(X), s(Y), D) :-
abs_diff(X, Y, D).
这些概念应该有助于启动一些关于如何解决其余问题的想法。
关于prolog - 如果 M 和 N 的差异大于 X,则序言中的谓词为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46862109/