首先介绍一个学习swi-prolog 和amzi-prolog很靠谱的中文网站:http://hyry.dip.jp/tech/book/page/prolog/search_game_maxmin.html
然后介绍一下我在学习时发现的prolog和其他编程语言的不同之处。
prolog是逻辑编程语言,在解决逻辑推理问题是有很明显的优势。
它的解决问题的策略是基于枚举法的,所以返回结果很可能不唯一。
进行prolog编程时重要的是把问题描述清楚,这样才能得到一个有效的解决方案。
swi-prolog和amzi-prolog是prolog语言的两种实现。(我认为挺好用的,可以从官网下载)。
swi-prolog:http://www.swi-prolog.org/download/stable
amzi-prolog:http://www.amzi.com/AmziOpenSource/downloads.php
最后开始我的学习笔记。
1 prolog 参数类型
整数: 绝对值小于某一个数的正数或负数。
原子: 通常是字母和数字组成,开头的字符必须是小写字母。例如: 'hello tt' hello
变量: 由大写字母或下划线_开头。例如:X _x
结构: 例如列表[A|B], [ ].
2 数据类型
整形,浮点型,字符串
3 简单的语法部分
知识表达:
%寻找Nani
room(kitchen). %%知识表达---原子
room(office).
room(hall).
room('dining room').
room(cellar).
location(desk,office). %%知识表达---结构
location(apple,kitchen).
location(flashlight,desk).
location('washing machine',cellar).
location(nani,'washing machine').
location(broccoli,kitchen).
location(crackers,kitchen).
location(computer,office).
door(office,hall).
door(kitchen,office).
door(hall,'dinning room').
door(kitchen,cellar).
door('dinning room',kitchen).
edible(apple).
edible(crackers).
tastes_yucky(broccoli).
turned_off(flashlight).
here(kithen).
where_food(X,Y):-location(X,Y),edible(X). %%知识表达----谓词(重点)
list_things(Place):-location(X,Place),tab(2),write(X),nl,fail.
以上为知识库的内容用NotePad以XX.pl的形式保存起来,运行swiprolog里的consult命令,然后就可以对知识库进行提问了。
询问语句
简单查询
?- room(X). %单变量
?-location(Thing, kitchen). %固定一个变量
?- location(Thing, Place). %两个变量
关联查询
?- location(X, kitchen), edible(X). %厨房里有什么是可以吃的
?- door(kitchen,R),location(T,R). %和厨房相连的房间里有什么
运用内部的函数查询
?- location(X,kitchen),write(X),nl,fail.
%write() %显示查询结果
%nl %换行,输出一个回车键
注意
Prolog子句中的变量全部都是局部变量
Prolog中没有全局变量
asserts和retracts就是控制这些全局数据的工具
Prolog的变量是没有数据类型之分的
先到这里,关于列表,内置谓词,数值计算,控制语句,操作符的内容,我们下一篇再介绍
文章主要参考:http://hyry.dip.jp/tech/book/page/prolog/search_game_maxmin.html