2016-11-23 10 views
0

私は以下からなる一連のルールを持っています。子供がリスト(例:[ag、bg])と人/ 6の場合は、Prolog - 数学演算子を使用した問題

ファミリ(母親、父親、子供)日付は、日、月、年として設定されている人です。

同じか連続した日に生まれていない2人の子供が1年離れていなければならないと言いたいと思います。 私はこれを何時間もしてきましたが、どこにも見えないようです。私のコードは以下の通りです。 アドバイスをいただければ幸いです。

bad_children() :- 
     family(_,_,Q), 
     member(J,Q), 
     member(T,Q), 
     person(J,_,_,_,date(E,M,Y),place(_,_)), 
     person(T,_,_,_,date(F,M,K),place(_,_)), 
     (E \= F ; E \= (F+1) ; E \= (F-1)), 
     (Y-K) < 1 
    ; (K-Y) < 1, 
     write(J), 
     write(' and '), 
     write(T), 
     write(' are born to close together.'). 

答えて

1

主な誤りは、演算子(\ =)/ 2です。それはdon't unifyを意味し、算術評価は行いません。

また、分離記号(Y-K) < 1 ; (K-Y) < 1を括弧で囲む必要があります。

ので、(未テスト)コードが正しい出力が印刷されているが、それは答えを3回印刷して、あなたはこれが起こる理由を任意のアイデアを持っていない、助けのためにあなたを

bad_children :- 
family(_,_,Q), 
member(person(J,_,_,_,date(E,M,Y),_),Q), % You're not interested in place/2 
member(person(T,_,_,_,date(F,M,K),_),Q), 
J \= T, % Regardless the date, you should check the identity. Here \= is fine 
(E =\= F; E =\= F+1; E =\= F-1), 
(Y-K < 1 ; K-Y < 1), 
format('~w and ~w are born to close together.', [J, T]). 
+0

感謝されるだろうか? –

+0

はおそらく複数の一致があるためです。おそらく、私がアイデンティティについて投稿した条件を 'J @ Perl '-s'ファイルテスト演算子の問題

  • 27. テンプレートクラス演算子のオーバーロードの問題
  • 28. ifステートメントの問題 - 比較演算子
  • 29. javascript条件演算子の問題
  • 30. テンプレートサブクラスの演算子オーバーライド問題==