1

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

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

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

1 回答 1

2

我的 Prolog 知识很旧,但我认为问题在于 Prolog 只评估is

所以试试:

pythag(H,A,B) :- Z is H*H, Z is (A*A) + (B*B).
于 2013-05-14T16:11:19.823 回答