打老游戏轩辕剑苍之涛时,在剧情中走到西戎部落中,有个西戎姐问了下列问题:
看到题目,立马在另一台本本写prolog记下这些条件。但写程式毕竟赶不上打游戏,只好先猜猜,是阿胖。很幸运一猜就中。
这问题和许多匹配类型的问题雷同,像是五个房子问题那样。
想谈的是程式都怎麽写呢?当我prolog抄下这些条件时,注意到自己写的方式是有一些范式:
以前看过有人解五房问题是写匹配五个模式的写法,像这样:
五只小鸟排成一列,小鸟毛色不同,名字不同,叫声不同,品种不同,喜欢的食物不同。大大的毛是灰黑色,美美说的是人话。小丑是乌鸦。毛色是花色的站在彩色的左边。毛色是花色的是麻雀。吃肉的小鸟叫声是呜。毛色是米色的小鸟吃小米。中间的是鹰。名较小演得小鸟站在最左边。吃虫的小鸟站在叫声是叽的隔壁。叫声是啊的隔壁是吃小米的。吃瓜子的是鹦鹉。阿胖吃杂粮。小眼站在黑色小鸟的隔壁。白文鸟站在吃虫的小鸟隔壁。请问哪只小鸟的叫声是啾?
看到题目,立马在另一台本本写prolog记下这些条件。但写程式毕竟赶不上打游戏,只好先猜猜,是阿胖。很幸运一猜就中。
这问题和许多匹配类型的问题雷同,像是五个房子问题那样。
想谈的是程式都怎麽写呢?当我prolog抄下这些条件时,注意到自己写的方式是有一些范式:
- 代码:
%基本事实
bird('Dada').
bird('Meimei').
bird('Little-eye').
bird('Fat').
bird('Uglie').
%第二层事实
color(Some, darkgray) :- bird(Some).
color(Some, cream) :- bird(Some).
...
nature(Some, parrot) :- bird(Some).
...
eat(Some, worm) :- bird(Some).
eat('Fat', grains).
%以下特别为第三层事实
eat(Some, millet) :- color(Some, cream).
....
%各样规则
food_tongue_neighbors(Birds, Food, Tongue) :-
member(B_1, Birds), member(B_2, Birds),
nth(I_1, Birds, B_1), nth(I_2, Birds, B_2),
adjacent(I_1, I_2),
eat(B_1, Food), tongue(B_2, Tongue).
......
%基本规则
adjacent(M, N) :- M - N =:= 1.
adjacent(M, N) :- N - M =:= 1.
以前看过有人解五房问题是写匹配五个模式的写法,像这样:
- 代码:
%判断规则
rule_1('Amsterdan', _, cigar, _, _, _) :-
...