prolog:检查毕达哥拉斯三联体的规则?

时间:2013-05-14 16:03:16

标签: math prolog pythagorean

Prolog继续对我说'no' .... :(

非常是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*/

对于测试,'addup'规则似乎有效.... 我相信我的程序中“IS”的左侧存在问题,因为以下测试似乎表明了这一点:

在交互模式中,我可以判断2是1还是1的总和,它表示是:

| ?- 2 is 1+1.

yes

但如果我切换左右两侧;它说没有:

| ?- 1+1 is 2.

no

有人可以提供上述pythag规则的正确版本吗? 版本信息如下:

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

1 个答案:

答案 0 :(得分:2)

我的序言知识已经过时,但我认为问题在于Prolog只评估is

的右侧

所以试试:

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