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.

そして、square の別の述語

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

コードを完成させてください

于 2013-06-04T05:35:15.787 に答える