gpt4 book ai didi

prolog - is 和 = 有什么区别?

转载 作者:行者123 更新时间:2023-12-03 21:47:42 24 4
gpt4 key购买 nike

我已将这些语句输入到 prolog 解释器中,但对结果感到困惑。他们不应该返回同样的东西吗?真的?

1 ?- 7 = 5 + 2.
false.

2 ?- 7 is 5 + 2.
true.

最佳答案

不,因为 =/2并不意味着在 Prolog 中分配,而是统一。统一算法对算术一无所知,只知道结构。所以你可以用 Prolog 中的算术表达式做一些在其他语言中很难实现的有趣的事情:

?- X = 5 + 2.
X = 5+2.

看起来那里什么也没发生,但实际发生的是 X 被赋予了值“5 + 2”作为一个结构。换一种方式:
?- A + B = 5 + 2.
A = 5,
B = 2.

甚至:
?- X = 5 + 2, X =.. [Op|_]. 
X = 5+2,
Op = (+).

不过,最后一个可能对整个列表更有意义:
?- X = 5 + 2, X =.. Y.
X = 5+2,
Y = [+, 5, 2].

这是非凡的“univ”运算符的效果, =../2 ,它能够在类似 Lisp 的列表和 Prolog 语法之间进行转换,使您能够以通用的方式对结构进行有趣的构造和分解。

现在, is/2 ,另一方面,确实了解算术。它将其左边的参数与其右边的算术简化结果统一起来。 请注意 它只在一个方向上起作用:
?- 7 is 5 + 2.
true.

?- 5 + 2 is 7.
false.

你可以说 =/2对结构和 is/2 感兴趣对数字相等感兴趣。但这确实意味着教授 Prolog 代数非常容易:
simplify(X * Y + X * Z, X * (Y + Z)).  % distributive property
simplify(X, X).

?- simplify(A * 3 + A * 4, Q).
Q = A* (3+4)

现在,这并不完美(请注意,我们得到的是 3+4 而不是 7),要让它变得真正智能还有很多工作要做:
?- simplify(3 * A + 4 * A, Q).
Q = 3*A+4*A.

但这是另一天的问题。

简而言之:
  • =/2触发统一
  • is/2触发算术评估
  • 关于prolog - is 和 = 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16027449/

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