Prolog语言介绍(一)

prolog语言介绍(一)

  Prolog( Programming in logic ) 语言 是一种面向演绎推理的逻辑型程序设计语言。

  Prolog语言的语法结构相当简单,但描述能力很强。例如,当事实和规则描述的是某一学科公理。那么问题就是待证的命题;当事实和规则描述的是某些数据和关系,那么问题就是数据查询语句;当事实和规则描述的是某些状态变化规律,那么问题就是目标状态。因此,Prolog语言是一种智能型程序设计语言。

  Prolog程序没有特定的运行顺序,程序运行顺序完全按照数理逻辑推导(消解法)的方式进行.而不是由编程序的人决定。Prolog是一种描述型语言,用特定的方法描述一个问题,然后由计算机自动找到这个问题的答案。举个极端的例子:当建立好事实和规则后,只需要把某个问题告诉它,它就会自动查找答案。

  Prolog程序中没有if、case、for这样的控制流程语句。通常情况下,程序员不需要了解程序的运行过程,只需要注重程序的描述是否全面。不过Prolog也提供了一些控制程序流程的方法,这些方法和其他语言中的方法有很大区别。

Prolog语法

  在Prolog中一共存在四种类型的语句:原子、数字、变量、复杂语句(结构)。原子和数字统称为常量;常量和变量统称为简单语句。

  • 可使用的字符范围

    • 大写字母:A-Z
    • 小写字母:a-z
    • 数字:0-9
    • 特殊英文字符:_ , + , - , * , / , <, > , = , : , . , &, ~, (空格也是字符,但是不常用且不可见)
  • 原子(Atoms)

    • 由有效字符(大写字母、小写字母、数字和下划线)构成的字符串,并且以小写字母为开头;
    • 使用单引号封装的字符列(可以使用空格符);
    • 特殊字符组成的字符串;
      • eg:@=,====》,;,:,-,等都是原子的;
      • 一些特殊原子已经有预定义的含义
  • 数字(Numbers)

      在典型的Prolog程序中,实数并不是很有用武之地。但整数却很有用,例如在计算列表的元素数目之类的工作时候。Prolog中数字的表示很简单,没有什么特殊

  • 变量(Variables)

    • 由大写字母、小写字母、数字和下划线组成的字符串,并且开头字母必须是大写字母下划线
    • ”_“是一个特例,它被称为匿名变量,这里不做详细介绍。
  • 复杂语句(Complex Terms)

  复杂语句由一个函子(functor,可以理解为函数名)和一个参数序列构成。参数序列放在小括号内,由英文逗号分隔,并且是放在函子后面。函子后面必须紧跟参数序列,中间不能有空格。函子必须是一个原子,变量不能用作函子。参数序列可以是任何类型的语句。

  例如loves(vincent, mia)就是一个复杂语句,loves是函子,vincent和mia是参数序列;jealous(marsellus,W)也是一个复杂语句,但是其参数序列中包含了变量。

  (注: 函子和谓词由一定区别,我的理解是:函子是谓词的名字,谓词包含了函子及其参数序列,是整个逻辑的实现统一体 )

  复杂语句的定义还可以允许更为复杂的情况:在复杂语句中,可以内嵌其他复杂语句,也就是说,复杂语句允许递归。比如:hide(X, father(father(father(butch))))

  复杂语句的参数个数称为元数(arity)。 比如,woman(mia)是一个元数为1的复杂语句,loves(vincent, mia)是一个元数为2的复杂语句。

  元数对于Prolog很重要。Prolog允许定义函子相同但是元数不同的复杂语句,使用元数不同的函子定义谓词时,Prolog会认为这两个谓词是不同的。

  当我们需要提及定义的谓词,介绍如何使用它们的时候(比如,在文档中),惯例是”函子/元数“这种形式 。

Prolog程序

  Prolog程序一般由一组事实规则问题组成。问题是程序执行的起点,称为程序的目标

  事实、规则和问题都分行书写;规则和事实可连续排列在一起,其顺序可随意安排,但同一谓词名的事实或规则(即同一谓词的子句)必须集中排列在一起;问题不能与规则及事实排在一起,它作为程序的目标要么单独列出,要么在程序运行时临时给出

  还需说明的是,Prolog程序中的事实或规则一般称为它们对应谓词的子句

  Prolog 程序的执行过程是一个(归结)演绎推理过程.其推理方式为反向推理,控制策略是深度优先且有回溯机制,具体实现方法是:自上而下匹配子句;从左向右选择子目标;(归结后)产生的新子目标总是插入被消去的目标处(即目标队列的左部).Prolog 的这种归结演绎方法被称为SLD(Linear resoluTIon with SelecTIon funcTIon for Definite clause)归结, 或 SLD 反驳—消解法。这样,SLD 归结就是 Prolog 程序的运行机理,也就是所谓的 Prolog 语言的过程性语义。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值