笔记之Prolog

Prolog

    Prolog这语言感觉挺吊的啊,声明式逻辑编程语言,不用描述解决方案,只要描述问题就可以交给语言本身了;太**的方便了。这语言用就是为:人工智能,自然语言理解,自学习等,而用的吧,太切合了!!
有一些的问题用Prolog来解决是非常适合的,如果这样我的算法老师就要失业了O(∩_∩)O 
  •   Io和Ruby被称为命令式语言(imperative language),这需要给出解决问题的具体步骤;

  •   Prolog是一种声明式编程语言(decalarative language)。你向Prolog提供一些事实(fact)和推论(inference),并让它为你推断。

  •   Prolog是最早成功的逻辑编程语言之一。你使用纯逻辑设置断言,Prolog判定它们是否为真。你可以在断言中留出空白,Prolog讲尝试填充这些空白并使那些不完整的事实变为真。

关于Prolog:
  Prolog是一门逻辑编程语言,其在自然语言处理领域颇受欢迎。你可以使用这门基于规则的语言来表达逻辑和i出问题。和SQL一样,Prolog基于数据库,但是其数据由逻辑规则和关系组成:和SQL一样,Prolog包含两个部分:一部分用于数据库,另一部分则用于查询数据,数据已逻辑规则形式存在,下面是基本构建单元:
  • 事实:事实是关于真实世界的基本断言。(Bebe是头猪,猪喜欢泥巴)

  • 规则:规则是关于真实世界中一些事实的推论。(如果一个动物是猪,那么它喜欢泥巴)

  • 查询:查询是关于真实世界的一个问题。(Bebe喜欢猪吗?)

  事实和规则被放入一个知识库(knowledge base)。Prolog编译器将这个知识库编译成一种适于高效查询的形式。
基本概论:
        在Prolog中,第一个字母的大小写是有着重要的意义的,如果一个词以小写字母开头,它就是一个原子(atom)—一个类似Ruby符号的固定值,如果以大写字母或下划线开头,那么它就是一个变量。
     下面一个例子(简单描述事实、规则、推论) http://www.jiprolog.com/demo.aspx 这个网站可以在线编写Prolog的代码。
代码和结果:
其实这个结果有点不对啊,这才是书上的结果(尼玛这网站是JIP ( ⊙ o ⊙ )啊!坑啊)(不搞了,后面的例子直接给代码得了)

实例:
接下来用Prolog来解决一个问题:
一个关于地图着色,用的是中国地图(福建,江西,浙江,湖南,湖北)
地图:
代码等:

程序在哪里:
Prolog没有变成的程序运行的过程,其解决的方法如下:
  1. 收集和整理逻辑;

  2. 用程序表达逻辑;

  3. 找出所有可能的解决方法;

  4. 通过程序验证这些可能的解决方法;

 一些Brian Tarbox 访谈录的一些看法:
  • 声明式的编程模型非常有魅力。一般来说,如果你能把问题描述出来,你就可以解决这个问题。(把如何去解决都交给电脑来处理)

  • 它不会给我们一个不完整的解决方法或者给出任何有关哪里有过度限制的信息。(要么是符合限制的完美结果,要么是no)

  • 这是一个极其强大的概念,无需描述问题的解决方案,只需描叙问题;而且它使用逻辑描述问题,只是用纯逻辑!

递归、列表、元组就不介绍了;(后面直接看例子)
(对于列表【】可以使用【Head|Tail】来解构列表)
到这里觉得对于这个Prolog语言其实语法并不是很多,重点是逻辑编程;要用来解决问题,做人工资能,自然语言等才能更好的提现它的能力;
这是最后一个例子,
关于数独的:(4*4 1~4的数独)(直接给出代码和运行结果):

代码:

valid([]).
valid([Head|Tail]) :-
    fd_all_different(Head),
    valid(Tail).
sudoku(Puzzle,Solution) :-
    Soulution = Puzzle,
    Puzzle = [S11,S12,S13,S14,
          S21,S22,S23,S24,
          S31,S32,S33,S34,
          S41,S42,S43,S44],
    fd_domain(Solution,1,4),
    Row1 = [S11,S12,S13,S14],
    Row2 = [S21,S22,S23,S24],
    Row3 = [S31,S32,S33,S34],
    Row4 = [S41,S42,S43,S44],
  
    Col1 = [S11,S21,S31,S41],
    Col2 = [S12,S22,S32,S42],
    Col3 = [S13,S23,S33,S43],
    Col4 = [S14,S24,S34,S44],
  
    Square1 = [S11,S12,S21,S22],
    Square2 = [S13,S14,S23,S24],
    Square3 = [S31,S32,S41,S42],
    Square4 = [S33,S34,S43,S44],
  
    valid([Row1,Row2,Row3,Row4,
        Col1,Col2,Col3,Col4,
        Square1,Square2,Square3,Square4]).
Prolog总结:
核心优势:
  1. 自然语言处理,它是第一种用于进行语言识别的语言。特别是,Prolog语言模型可以采用自然语言,应用基于事实和推论的知识库,并且可以用具体的适于计算机的规则表达那些复杂的不精确的语言。

  2. 游戏:游戏AI,对不同的情况有不同的行为。。

  3. 语义网??(没听说过):是为网络上的服务与信息提供附加含义的一种尝试。??

  4. 人工智能:这个不用说明了,从一开始就觉得这个领域就是Prolog的了。

  5. 调度,擅长处理有限资源。可以实现操作系统调度器等。

不足:
  1. 功用:擅长核心领域,(逻辑编程)会有一些语言设计的限制

  2. 超大数据集合:Prolog使用了一个深度优先搜索的决策树,它使用所有可能的组合与规则集合相匹配,并且其编译器对这个过程做了很好的优化。不过,这个策略需要大量的计算,特别是当数据集规模非常大的时候。这使得Prolog用户必须理解语言的工作原理以保证数据集的规模在可控制范围内。

  3. 混合命令式和声明式模型:必须经常使用尾递归规则去完成中等规模的问题。构建一个基于小数据集但无法扩展飞Prolog应用相对容易,但必须深入立即Prolog的工作原理才能更有效率的设计出在可接受的层次上进行扩展的规则。




  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小_杭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值