prolog杂记

Prolog没有复杂的语法,程序仅含有事实、规则和目标三种类型的语句,且都用谓词表示。
一旦给它递交必要的事实和规则之后,就使用内部的演绎推理机制自动求解程序给定的目标,而不需要在程序中列出详细的求解步骤。

1.事实(fact)
格式:〈谓词名〉 (〈项表〉).
例子:(注意末尾的.不能省略)

student(john).//约翰是学生
like(mary,music).//玛丽喜欢音乐

2.规则(rule)一般表示对象间的因果关系、蕴含关系或对应关系
格式:〈谓词名〉(〈项表〉):-〈谓词名〉(〈项表〉){,〈谓词名〉(〈项表〉)}.

bird(X):-animal(X),has(X,feather). 
run:-start,step1(X),step2(X),end. 

其中:-表示if 其左边为规则的结论,右边为前提。逗号表示and(逻辑与)
同一谓词名的事实或规则必须集中排列在一起

3.问题(question)——表示用户的询问, 它是程序运行的目标。
格式: ?-〈谓词名〉(〈项表〉){,〈谓词名〉(〈项表〉)}.

?-student(john).
?-like(mary,X). 




例:

  likes(bell,sports).
  likes(mary,music).
  likes(mary,sports).
  likes(jane,smith).

  friend(john,X):-likes(X,reading),likes(X,music).     
  friend(john,X):-likes(X,sports),likes(X,music).

  ?-friend(john,Y).

则求解目标:friend(john,Y). 
新目标: likes(X,reading),likes(X,music).





prolog称无值的变量为自由变量,有值的变量为约束变量。自由变量可以被实例化成约束变量,约束变量也可以被解除值成为自由变量。

两个谓词可匹配合一, 是指两个谓词的名相同, 参量项的个数相同, 参量类型对应相同, 并且对应参量项还满足下列条件:
(1) 如果两个都是常量, 则必须完全相同。
(2) 如果两个都是约束变量, 则两个约束值必须相同。
(3) 如果其中一个是常量, 一个是约束变量, 则约束值与常量必须相同。
(4) 至少有一个是自由变量。
例:

pre1(″ob1″,″ob2″,Z)  
pre1(″ob1″,X ,Y)

只有当X被约束为”ob2”且Z、Y至少有一个自由变量时它们才是匹配合一的。
当自由变量和常量合一时:常量作为变量的值
当两个自由变量合一时:共用一个存储单元

猜你喜欢

转载自blog.csdn.net/yogima/article/details/79706386