解决Prolog中的逻辑谜题

nun*_*nos 5 prolog zebra-puzzle

我正在阅读"现在学习Prolog",其中一个我自己无法解决的练习如下:

有一条街道有三个相邻的房子,都有不同的颜色.它们是红色,蓝色和绿色.不同国籍的人住在不同的房子里,他们都有不同的宠物.以下是关于它们的更多事实:

  • 英国人住在红房子里.
  • 美洲虎是西班牙家庭的宠儿.
  • 日本人生活在蜗牛守护者的右边.
  • 蜗牛守护者住在蓝房子的左边.

谁养斑马?

定义一个谓词zebra/1,告诉你斑马所有者的国籍.

提示:想想房屋和街道的代表.编写Prolog中的四个约束.member并且sublist可能是有用的谓词.

任何想法如何在Prolog下编码?谢谢.

ДМИ*_*КОВ 8

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).
Run Code Online (Sandbox Code Playgroud)