七周七语言:Prolog Day 1
第一天
看到‘地图着色’那个例子的时候觉得prolog这下牛逼了……的确,只要通过描述的事实,就能将其填色 :)
这里介绍一下怎么用prolog来解地图填色问题:
在prolog中,只需要描述颜色的种类、以及各个区域的接壤问题即可。
different(red, green). different(red, blue). different(green, red). different(green, blue). different(blue, red). different(blue, green). coloring(Alabama, Mississippi, Georgia, Tennessee, Florida) :- different(Mississippi, Tennessee), different(Mississippi, Alabama), different(Alabama, Tennessee), different(Alabama, Mississippi), different(Alabama, Georgia), different(Alabama, Florida), different(Georgia, Florida), different(Georgia, Tennessee). | -? coloring(Alabama, Mississippi, Georgia, Tennessee, Florida). Alabama = blue Florida = green Georgia = red Mississippi = red Tennessee = green ?
再输入a就可以获得另外几种着色的组合。如果换一种地图导致三种颜色无法获得填色结果,prolog会告诉你:no. 就是这样,感觉就像和程序在对话,再添加一种颜色也许就可以得到答案。
BTW,这次的作业蛮少的……
做
-
建立一个简单的知识库。描述一些你喜欢的书籍和作者。
感觉这题都不用写‘规则’……事实也的确是,就像SQL一样进行Select
author('hanhan'). author('wujun'). author('lutz'). author('Qianneng'). book('1988'). book('C++ programming'). book('learning python'). book('qingchun'). book('Art of Math'). book('lang chao zhi dian'). wrote('hanhan', '1988'). wrote('hanhan', 'qingchun'). wrote('wujun', 'Art of Math'). wrote('wujun', 'lang chao zhi dian'). wrote('lutz', 'learning python'). wrote('Qianneng', 'C++ programming').
-
找出知识库中某位作者编写的所有书籍。
| ?-wrote('hanhan', What). What = '1988' ? ; What = qingchun ? yes
-
建立一个描述音乐家和乐器的知识库,同时也描述出音乐家以及他们的音乐风格。
musician('Jay'). musician('Eason'). musician('Langlang'). musician('Lee hom'). musician('Xin'). instrument('Guitar'). instrument('Piano'). style('Jay', 'R&B'). style('Eason', 'Pop'). style('Langlang', 'classic'). style('Lee hom', 'Pop'). style('Xin', 'Pop'). musician_use('Jay', 'Guitar'). musician_use('Jay', 'Piano'). musician_use('Eason', 'Piano'). musician_use('Langlang', 'Piano'). musician_use('Lee hom','Piano'). musician_use('Xin', 'Guitar').
-
找出所有使用吉他的音乐家。
| -?musician_use(Who, 'Guitar'). Who = 'Jay' ? ; Who = 'Xin' ? yes
stay hungry...