返回首页

Prolog 匹配知识教程

时间:2017-12-04 21:55来源:知行网www.zhixing123.cn 编辑:麦田守望者

这篇 post 有两个主要的目的:

  1. 讨论 Prolog 中的匹配, 解释匹配(match)与相等的不同.
  2. 使用 Prolog 搜索的机制解决一些问题.

##Matching

Prolog 中有三种不同的 term, 分别的 constants, variablescomplex terms.

接下来我们解释一下两个 terms 是如何匹配的.

当两个 term 含有相等, 或者两个 term 中的变量在被绑定为指定值之后, 两个 term 相等时, 两个 term 匹配.

也就是说, 以下的 term 都会匹配:

  • mia = mia.
  • 42 = 42.
  • mia = X.
  • X = Y.
  • friends(john,X) = friends(Y,tom).
  • 接下来我们对匹配进行更精确的定义:

    1. 如果 term1 和 term2 都是常量, 那么只有当两者是相同的原子或者相同的数字, term1 term2 匹配.
    2. 如果 term1 是变量, term2 是任意类型的 term, 那么 term1 和 term2 匹配, term1 会被绑定为 term2.
    3. 如果 term1 term2 是 complex term, 那么在下面情况下, 它们会匹配
    4. 它们含有相同的名字和参数数量.
    5. 它们对应的参数匹配.
    6. 变量的绑定是兼容的, 同一个变量不会同时绑定为两个值.
  • 两个 terms 只有在上述 3 个条件之一成立时, 才会匹配.
  • 匹配有什么作用呢? 我们可以使用匹配来为我们提供更强大的抽象能力:

    vertical(line(point(X,Y),point(X,Z))).
    horizontal(line(point(X,Y),point(Z,Y))).
    

    这两行 Prolog 代码并不是规则, 而是事实, 我们可以使用匹配的能力, 写出这两个规则, 这样我们就可以轻易地判断一条直线是否是垂直的或是水平的.

    ?- vertical(line(point(1,1),point(1,3))).
    true
    

    同样我们也可以利用匹配来寻找与某一点构成垂线的点.

    ?- vertical(line(point(1,1),point(X,4))).
    X = 1.
    

    同样我们也可以利用 Prolog 的匹配解决更加复杂更加困难的问题.

    现在我们有 6 个单词, 我们需要将它们填入下面的拼图里:

    word(abalone,a,b,a,l,o,n,e). 
    word(abandon,a,b,a,n,d,o,n). 
    word(enhance,e,n,h,a,n,c,e). 
    word(anagram,a,n,a,g,r,a,m). 
    word(connect,c,o,n,n,e,c,t). 
    word(elegant,e,l,e,g,a,n,t).
    

    我们可以通过 Prolog 得出答案, 只需要将需要满足的条件写在 predicate 里:

    crosswd(V1,V2,V3,H1,H2,H3):-
        word(V1,_,A,_,B,_,C,_),
        word(V2,_,D,_,E,_,F,_),
        word(V3,_,G,_,H,_,I,_),
        word(H1,_,A,_,D,_,G,_),
        word(H2,_,B,_,E,_,H,_),
        word(H3,_,C,_,F,_,I,_),
    

    这样我们就可以得到结果:

    ?- crosswd(H1,H2,H3,V1,V2,V3).
    H1 = abalone,
    H2 = anagram,
    H3 = connect,
    V1 = abandon,
    V2 = elegant,
    V3 = enhance ;
    H1 = abandon,
    H2 = elegant,
    H3 = enhance,
    V1 = abalone,
    V2 = anagram,
    V3 = connect ;
    false.
    

    Prolog 中匹配的能力非常强大, 其实它就是对已经有的条件和数据进行搜索, 尝试所有的答案, 最后给出满足条件的所有结果, 能够极大的降低我们的计算量.

    ------分隔线----------------------------
    标签(Tag):Prolog
    ------分隔线----------------------------
    推荐内容
  • Prolog 列表和运算符知识详解

    post 中介绍一下列表和运算符, 相信熟悉或者玩过函数式编程语言的朋友可能已经在函数...

  • Prolog 匹配知识教程

    这篇 post 有两个主要的目的: 讨论 Prolog 中的匹配, 解释匹配(match)与相等的不同. ...

  • cyclone iii 器件远程升级(Remote Update)小结

    由于项目需要,前段时间做了ALTERA cyclone iii FPGA的远程升级功能,由于项目时间紧...

  • AjaxControlToolkit--HtmlEditor

    HtmlEditor在AjaxControlToolkit的上个版本中就已经提供了,属于一个功能比较简单的Ht...

  • Ajax实现无刷新三联动下拉框实现代码

    1.html代码 HTML HEAD titleAjax实现无刷新三联动下拉框/title meta content=Microsof...

  • Ajax简单示例之改变下拉框动态生成表格实现代码

    1.建立一个aspx页面,html代码 html xmlns=http://www.w3.org/1999/xhtml head runat=...

  • 猜你感兴趣
  • 教育技术学动态
  • 教育技术学论文
  • 理论研究
  • 应用研究
  • 资源收藏
  • 百家观点
  • 英文文献
  • 中国电化教育
  • 电化教育研究
  • 中国远程教育
  • 开放教育研究
  • 现代教育技术
  • 远程教育杂志
  • 现代远距离教育
  • 中国教育信息化
  • 中国信息技术教育
  • 中小学信息技术
  • Flash龙8娱乐官网手机版
  • Photoshop龙8娱乐官网手机版
  • 3DMAX龙8娱乐官网手机版
  • AutoCAD龙8娱乐官网手机版
  • CorelDRAW龙8娱乐官网手机版
  • Matlab龙8娱乐官网手机版
  • 其他龙8娱乐官网手机版
  • .Net龙8娱乐官网手机版
  • Asp龙8娱乐官网手机版
  • Php龙8娱乐官网手机版
  • Jsp龙8娱乐官网手机版
  • Ajax龙8娱乐官网手机版
  • Android教程
  • 其他龙8娱乐官网手机版
  • Word教程
  • Excel教程
  • PowerPoint教程
  • Ubuntu教程
  • 其他教程
  • 课件下载
  • 软件下载
  • 视频教程下载
  • 其他下载
  • 教案大全
  • 试题大全
  • 课件大全
  • 其他大全
  • 人像摄影
  • 风光摄影