七週七語言: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
    		
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章