nun*_*nos 5 prolog zebra-puzzle
我正在阅读"现在学习Prolog",其中一个我自己无法解决的练习如下:
有一条街道有三个相邻的房子,都有不同的颜色.它们是红色,蓝色和绿色.不同国籍的人住在不同的房子里,他们都有不同的宠物.以下是关于它们的更多事实:
- 英国人住在红房子里.
- 美洲虎是西班牙家庭的宠儿.
- 日本人生活在蜗牛守护者的右边.
- 蜗牛守护者住在蓝房子的左边.
谁养斑马?
定义一个谓词
zebra/1,告诉你斑马所有者的国籍.提示:想想房屋和街道的代表.编写Prolog中的四个约束.
member并且sublist可能是有用的谓词.
任何想法如何在Prolog下编码?谢谢.
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)
| 归档时间: |
|
| 查看次数: |
5445 次 |
| 最近记录: |