2

Prolog を使用してアインシュタインのなぞなぞを解こうとしています。ハウス(Hs)で実行しようとすると、Noと表示されます。タスクは

  1. イギリス人は赤い家に住んでいます。
  2. スウェーデン人は犬をペットとして飼っています。
  3. デーンはお茶を飲みます。
  4. グリーン ハウスはホワイト ハウスのすぐ左側にあります。
  5. グリーンハウスのオーナーはコーヒーを飲みます。
  6. ポールモールを吸うオーナーが鳥を飼っています。
  7. 黄色い家のオーナーはダンヒルを吸っている.
  8. センターハウスに住むオーナーは牛乳を飲んでいます。
  9. ノルウェー人は最初の家に住んでいます。
  10. ブレンドを吸う飼い主と、猫を飼っている飼い主の隣に住んでいます。
  11. 馬を飼っているオーナーと、ダンヒルを吸っているオーナーの隣に住んでいます。
  12. ブルーマスターズを吸うオーナーはビールを飲む。
  13. ドイツ人はプリンスを吸う。
  14. そのノルウェー人は青い家の隣に住んでいます。
  15. ブレンドを吸うオーナーは、水を飲む人の隣に住んでいます。
    住宅(Hs) :-
       長さ(Hs, 5),                                            
       member(h(英語,_,_,_,red), Hs),                         
       member(h(swede,dog,_,_,_), Hs),                         
       member(h(_,_,_,coffee,green), Hs),                        
       member(h(dane,_,_,tea,_), Hs),                       
       next(h(_,_,_,_,緑), h(_,_,_,_,白), Hs),             
       member(h(_,bird,'ポールモール',_,_), Hs),                       
       member(h(_,_,'ダンヒル',_,yellow), Hs),                         
       Hs = [_,_,h(_,_,_,牛乳,_),_,_],                           
       Hs = [h(ノルウェー語,_,_,_,_)|_],                            
       next(h(_,horse,_,_,_), h(_,_,'ダンヒル',_,_), Hs),        
       next(h(_,_,blend,_,_), h(_,cat,_,_,_), Hs),             
       member(h(_,_,'ブルーマスター',beer,_), Hs),                        
       member(h(ドイツ語,_,'プリンス',_,_), Hs),                      
       next(h(ノルウェー語,_,_,_,_), h(_,_,_,_,青), Hs),  
       next(h(_,_,'ブレンド',_,_), h(_,_,_,water,_), Hs),
       メンバー(h(_,fish,_,_,_), Hs)。

    next(A, B, Ls) :- append(_, [A,B|_], Ls)。
    next(A, B, Ls) :- append(_, [B,A|_], Ls).

何が悪いのかわかりません。ありがとう

4

1 に答える 1

5

これがあなたのプログラムの一般化です。いくつかの目標を削除するために追加を追加*し、いくつかの用語を に置き換えました_/*origterm*/。それでも、結果のプログラムはまだ失敗しています。したがって、エラー残りのフラグメントにある必要があります。あなたはプログラムについて何も言わなかったので (編集: 後で何か追加しました)、私はそれが何であるかを知りません (編集: 知りたいです)。しかし、何があっても、エラーは残りの可視部分にある必要があります。

:- 初期化(家(_Sol))。
:- op(950, fy, *).
*_.

住宅(Hs) :-
   長さ(Hs, 5),
   * member(h(english,_,_,_,red), Hs) , % 2
   * member(h(swede,dog,_,_,_), Hs) ,
   * member(h(_,_,_,coffee,green), Hs) ,
   * member(h(dane,_,_,tea,_), Hs) ,
   * next(h(_,_,_,_,green), h(_,_,_,_,white), Hs) ,
   member(h(_,_ /*bird*/ ,'ポールモール',_,_), Hs),
   member(h(_,_,'Dunhill',_,_ /*yellow*/ ), Hs),
   * Hs = [_,_,h(_,_,_,ミルク,_),_,_] ,
   * Hs = [h(ノルウェー語,_,_,_,_)|_] ,
   * next(h(_,horse,_,_,_), h(_,_,'ダンヒル',_,_), Hs) ,
   next(h(_,_,blend,_,_), _ /*h(_,cat,_,_,_)*/ , Hs),
   member(h(_,_,'ブルーマスター',_ /*ビール*/ ,_), Hs),
   member(h(_ /*ドイツ語*/ ,_,'プリンス',_,_), Hs),
   * next(h(ノルウェー語,_,_,_,_), h(_,_,_,_,青), Hs) ,
   next(h(_,_,'ブレンド',_,_), _ /*h(_,_,_,water,_)*/ , Hs),
   * member(h(_,fish,_,_,_), Hs) .

next(A, B, Ls) :- append(_, [A,B|_], Ls)。
next(A, B, Ls) :- append(_, [B,A|_], Ls).

残り少なくなりました!表示されている部分に少なくとも 1 つのエラーがあります。(そして、厳密に言えば、他の部分にはもっと多くのエラーがあるかもしれません。私たちは単に知りません)。

于 2016-04-24T10:06:03.477 に答える