2010-12-05 22 views

答えて

2

を言うことができます。

あなたはYZは、いくつかの限定セット(5未満例えば正の整数)からのものであることを知っていれば、あなたは次のような何かを行うことができますが、私は

valid_number(1). 
valid_number(2). 
valid_number(3). 
valid_number(4). 

test(X, Y, Z) :- valid_number(Y), valid_number(Z), X is Y + Z. 
+1

これらの設定制約は、 'between/3'で達成することもできます。 –

+0

はい。私はこれが(I、J、J)の間に を見つけました: - J> = I。 (I、J、K)の間: :-J> I、J1は(I、J1、K)の間のJ-1である。 ? - (1、4、X)の間。X = 4; X = 3; X = 2; X = 1; false。 非常に役に立ちました。 – Martynas

3

あなたは引数として渡す必要があります。プロローグの算術演算(is/2)はマジックワンドではないため、その右の引数は評価する前に完全にインスタンス化する必要があります(変数なし)。

述語をいくつかの「方向」で動作させたい場合、基本用語と変数の複数の組み合わせを使用する場合は、制約論理プログラミングを使用することをお勧めします。有限領域上のCLPでは、あなたはあなたが欲しいものであることをYを選択することができますし、それらをZまたはその逆を計算するので、それは不可能です

:- use_module(library(clpfd)). % this differs between implementations 
test(X,Y,Z) :- X #= Y + Z. 
+1

二larsmans'制約の提案をし、それがはるかに簡単です見つけます低レベルのmoded算術よりも初心者のための理解が必要です。私の意見では、/ 2は初心者のために理解するのが難しいので入門コースから除外されるべきです。 – mat

関連する問題