1

我下面的代码旨在按顺序生成自然数的平方

(即sq(X). -> X=0; X=1; X=4; X=9; X=16; ...

nat(0).
nat(X) :- nat(Y), Z is Y+1, X is Z*Z.

但我得到的答案是:

1

0 ?- nat(X).

X = 0 ;

X = 1 ;

X = 4 ;

X = 25 ;

X = 676 

应该是一个快速的解决方案,但我在这方面花费的时间比我想说的要长。任何帮助是极大的赞赏!

4

1 回答 1

2

您的 nat/1 似乎确实返回了不同的序列。应该

nat(0).
nat(X) :- nat(Y), X is Y+1.

然后,正方形的不同谓词

sq(X) :- % call nat/1, square it...

请完成代码

于 2013-06-04T05:35:15.787 回答