gpt4 book ai didi

Prolog 'is/2' 谓词实现

转载 作者:行者123 更新时间:2023-12-02 03:39:27 27 4
gpt4 key购买 nike

'is/2' Prolog 谓词是如何实现的?这个我知道

X is 3*4

等同于

is(X, 3*4)

但是谓词是使用命令式编程实现的吗?换句话说,实现是否等同于以下C代码?

if(uninstantiated(x)) 
{
X = 3*4;
}
else
{
//signal an error
}

还是使用声明式编程和其他谓词实现?

最佳答案

显然,取决于您的 Prolog,但任何实际的实现都将在 C 或其他命令式语言中完成它的肮脏工作。 is/2的部分可以在纯Prolog中模拟:

is(X, Expr) :-
evaluate(Expr, Value),
(var(X) ->
X = Value
;
X =:= Value
).

evaluate 是一个巨大的谓词,它知道算术表达式。也有一些方法可以在纯 Prolog 中实现它的大部分内容,但这既缓慢又痛苦。例如。如果您有一个添加整数的谓词,那么您也可以使用以下(愚蠢的)算法将它们相乘:

evaluate(X + Y, Value) :-
% even this can be done in Prolog using an increment predicate,
% but it would take O(n) time to do n/2 + n/2.
add(X, Y, Value).
evaluate(X * Y, Value) :-
(X == 0 ->
Value = 0
;
evaluate(X + -1, X1),
evaluate(X1, Y, Value1),
evaluate(Y + Value1, Value)
).

这些都不能保证实用或正确;我只是展示如何在 Prolog 中实现算术

关于Prolog 'is/2' 谓词实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21001152/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com