Prolog语言介绍(一)

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

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 语言的过程性语义。

今天的文章Prolog语言介绍(一)分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/10399.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注