Prolog 人工智能语言中文论坛---打造优质Prolog学习交流园地

一个供Prolog爱好者学习与交流的地方


您没有登录。 请登录注册

轩辕剑苍之涛内的一个问题:哪只鸟儿叫声是啾

浏览上一个主题 浏览下一个主题 向下  留言 [第1页/共1页]

打老游戏轩辕剑苍之涛时,在剧情中走到西戎部落中,有个西戎姐问了下列问题:
五只小鸟排成一列,小鸟毛色不同,名字不同,叫声不同,品种不同,喜欢的食物不同。大大的毛是灰黑色,美美说的是人话。小丑是乌鸦。毛色是花色的站在彩色的左边。毛色是花色的是麻雀。吃肉的小鸟叫声是呜。毛色是米色的小鸟吃小米。中间的是鹰。名较小演得小鸟站在最左边。吃虫的小鸟站在叫声是叽的隔壁。叫声是啊的隔壁是吃小米的。吃瓜子的是鹦鹉。阿胖吃杂粮。小眼站在黑色小鸟的隔壁。白文鸟站在吃虫的小鸟隔壁。请问哪只小鸟的叫声是啾?

看到题目,立马在另一台本本写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, _, _, _) :-
  ...
我觉得,这样写法的人工成份很多,要省略哪些参数是由自己决定的。於是很难写成自动化程式。

查阅用户资料 http://yauhsien.wordpress.com

浏览上一个主题 浏览下一个主题 返回页首  留言 [第1页/共1页]

您在这个论坛的权限:
不能在这个论坛回复主题