5

「LearnPrologNow」を読んでいますが、自分で解決できなかった演習の1つは次のとおりです。

色の違う3軒の家が隣接する通りがあります。それらは赤、青、緑です。さまざまな国籍の人々がさまざまな家に住んでいて、彼らはすべてさまざまなペットを飼っています。ここにそれらについてのいくつかのより多くの事実があります:

  • イギリス人は赤い家に住んでいます。
  • ジャガーはスペインの家族のペットです。
  • 日本人はカタツムリの番人の右側に住んでいます。
  • カタツムリの飼育係は青い家の左側に住んでいます。

ゼブラを保持しているのは誰ですか?

zebra/1シマウマの所有者の国籍を示す述語を定義します。

ヒント:家や通りの表現を考えてみてください。Prologで4つの制約をコーディングします。member有用なsublist述語かもしれません。

Prologの下でそれをコーディングする方法について何かアイデアはありますか?ありがとう。

4

2 に答える 2

7
neigh(Left, Right, List) :- 
        List = [Left | [Right | _]];
        List = [_ | [Left | [Right]]].

zebraowner(Houses, ZebraOwner):-
        member([englishman, _, red], Houses),
        member([spanish, jaguar, _], Houses),
        neigh([_, snail, _], [japanese, _, _], Houses),
        neigh([_, snail, _], [_, _, blue], Houses),
        member([ZebraOwner, zebra, _], Houses),
        member([_, _, green], Houses).


zebra(X) :- zebraowner([_, _, _], X).
于 2011-01-17T19:27:32.267 に答える