第一天
看到‘地圖着色’那個例子的時候覺得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