prolog学习备忘

1 辙道辕门 发表于 2014-07-01 16:29:22 +0800 阅览(75) 评论(0)
 
 

prolog是一门比较独特的语言,有人将之归纳为“声明式”。特点是,开发者通过构建基于数理逻辑的“知识库”,而后由prolog根据知识库主动求解,而无需开发者描述算法。因此如何构建知识库,或者说,如何使用数理逻辑的方式描述已知和问题,是学习prolog的重点。

在prolog里,小写字母开头的字符序列为一个“原子(atom)”,大写字母开头的字符序列为一个“变量”。原子类似ruby中的symbol。“_”可以匹配任意变量,可以视作一个占位符。

知识库需要写在文件里预先编译,写好后在prolog交互控制台里执行['filename.pl'].来编译知识库。

交互控制台似乎只能查询。另外不同的prolog中有各自不同的方言。

注意:处理未被定义的规则时一定要注意。比如:

在知识库里没有定义is_human(neko).这条规则时,使用\+(is_human(neko)).可以正确返回true,但注意:将neko换为X之类的大写变量时,prolog无法返回所有满足条件的记录,只会简单地返回一个no。因此,无法利用这种规则来建立逻辑推导,只能显式定义is_not_human(neko). ,不知是不是我对prolog的理解不到位。

[Head|Tail] = 一个列表时,Head会匹配头,Tail会匹配第二个及以后的元素所构成的集合。但无法匹配空列表,即:Head必须有元素才能匹配。

 

prolog中与输入有关的谓词(参考这个GitHub页面):

   geto(X) 如 X与输入流中的下一个字符匹配,则目标成功。
    get(X) 如 X与输入流中的下一个打印字符匹配,则目标成功
   skip(X) 读入并跳过当前输入流中的字符,直到找到一个可与X匹配的字符
   read(X) 读入当前输入流的下一个项,并使之与X匹配
    put(X) 把整数X输出到当前输出流(X必须例化)
        nl  对当前输出流输出控制符"回车换行"
    tab(X) 输出X个空格符到当前输出流(X必须例化)
  write(X) 把项X输出到当前输出流
display(X) 与write(X)相似,只是它忽略运算符说明,以结构形式输出项
 op(X,Y,Z) 说明名为Z的运算符,其优先级为X,结合规则为Y


待补充更多语法……

待补充更多语法……

 
|

评论列表

还没有人评论。
返回