Math 序言:检查毕达哥拉斯三元组的规则?

Math 序言:检查毕达哥拉斯三元组的规则?,math,prolog,pythagorean,Math,Prolog,Pythagorean,Prolog一直对我说( 我对prolog非常陌生,我有一个基本问题: 所以我试图产生一个简单的规则,检查三个数字是否构成直角三角形边的长度,如下所示: addup(X,Y,Z) :- X is Y+Z. /* this works*/ pythag(H,A,B) :- (H*H) is (A*A) + (B*B). /*this doesn't work*/ 对于测试,“相加”规则似乎确实有效。。。。 我认为我的程序中“is”的左侧存在问题,因为以下测试似乎表明了这一点: 在交互模式下,我可

Prolog一直对我说(

我对prolog非常陌生,我有一个基本问题:

所以我试图产生一个简单的规则,检查三个数字是否构成直角三角形边的长度,如下所示:

addup(X,Y,Z) :- X is Y+Z. /* this works*/
pythag(H,A,B) :- (H*H) is (A*A) + (B*B). /*this doesn't work*/
对于测试,“相加”规则似乎确实有效。。。。 我认为我的程序中“is”的左侧存在问题,因为以下测试似乎表明了这一点:

在交互模式下,我可以判断2是否是1和1的和,它说是:

| ?- 2 is 1+1.

yes
但如果我切换左右两侧,它会说不:

| ?- 1+1 is 2.

no
有人能提供上述毕达格法则的正确版本吗? 版本信息如下:

GNU Prolog 1.3.0
By Daniel Diaz
Copyright (C) 1999-2007 Daniel Diaz
| ?- 

我的prolog知识很老,但我相信问题在于prolog只计算
is
is的右侧

因此,请尝试:

pythag(H,A,B) :- Z is H*H, Z is (A*A) + (B*B).