七周七语言: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
    		
posted @ 2012-12-21 15:11  冰激淋  阅读(446)  评论(0编辑  收藏  举报