Prolog语言 |
您所在的位置:网站首页 › 人工智能语言只有Prolog语言 › Prolog语言 |
简介:
Prolog语言是一种以一阶谓词为基础的逻辑性语言(Programming in Logic) Prolog语言以一阶谓词逻辑的Horn子句集为语法,以Robinson的消解原理为工具,加上深度优先的控制策略而形成的人工智能通用程序设计语言 特点: ① 是一种描述性语言。只需要告诉 “系统做什 么” ,不要告诉系统 “如何做” ② 数据与程序的统一表达。提供一种统一的符 号结构 “项” ,数据与程序都是由项组成 ③ 自动实现模式匹配与回溯。这是人工智能中最常 用的两项操作,Prolog自动实现这些操作 ④ 程序易于编写与阅读。它是面向人的自然语言 ⑤ 语句句型少,语法简明。只有三种句型 基本内容: 1 项 符号说明:“ ::= ” 表示“ 定义为 ” “ | ” 表示 “ 或 ” ,可选 “ { } ” 表示 “ 重复或者出现多 项的定义:::=|| 常量::=[ ::= || 标识符原子: 命名:用小写字母或者小写字母开头的小写字母数字串 用途:用于标识对象的名字、谓词(对象间的关系)或函数名 例: john, marry, classmate, teacher 字符串原子:是用引号括起来的符号串 特殊原子:指一些特殊符号,如+、-、*、/等 变量用于表示暂时不能命名或者不需要命 名的对象,用大写字母开头 特殊变量:空变量,记作: “_“ 含义:我们对问题的某一个变量的值不关心 复合项由一组其它对象组成的单个对象 ({,} | {己原子>} 例: 函数项: like(john, apple) 表: [sa, sb], [1,2,3] 表达式: (12+59)*49-96 2 Prolog中的语句 Prolog中的语句分成三种形式: ① 事实:P. 含义:无条件成立,恒为真 例:like( monkey, banana) ② 规则: P :- P1 , P2 , … , Pn . “ :- ” 表示“蕴涵” “ ,” 表示“合取” 含义:若 P1 , … , Pn均为真时,P为真 ③ 问题(目标) Goal Q1,Q,.…. ,Qm . 含义:待回答的问题,即Q1,.…. ,Qm同时为真吗? 从消解角度来看: ①(事实)中,P是Horn子句 ②(规则)可以表示为 P1∧P2∧…∧PnÞP 可以转化为 ~P1∨~P2∨…∨~Pn∨P 也是Horn子句,并受全称量词约束 ③(问题)是 Q1∧…∧Qm 受存在量词约束,取非后 ~Q1∨…∨~Qm 受全称量词约束,是Horn子句 Prolog三种形式的语言都是Horn子句 问题求解就是Horn子句集消解 3 表结构表:若干个元素的有序序列 表中的元素:常量、变量、项、表 表用“[ ]”来表示,元素之间用逗号或者空格分开 例: [1, 2, 3] [a, b, c, d] 用符号“ | ”来划分表头(第一个元素)和表 尾(其余元素) 特例: 当只用一个元素时,表尾为空 空表(无元素),既无表头又无表尾 例: P([the, cat, sat, down]). ?- P([ X | Y ]). 答案:X=the, Y=[cat, sat, down] ?-P([ X , Y | Z ]). 答案:X=the, Y=cat,Z=[sat, down] 4 Prolog程序的结构Prolog的程序分为两部分: 前提部分:所有事实和规则。问题部分:目标子句序列。 注意: 这两部分不能颠倒。必须前提部分写在前 面,问题部分写在后面
说明: 实际运行中,要逐个试探(搜索),失败 则要回溯,成功也要回溯(求出所有解)
Prolog的实现方法主要是: 匹配与回溯 匹配:合一过程、消解过程 回溯:搜索,而且是深度优先搜索 关于匹配的几点说明: 第一、 一个变量被置换后,代入了另一个项, 则称该变量为实例化的变量 第二、一个未实例化的变量可以与任何项匹配: ① 若与另一个未实例化的变量匹配,则视为同一变量,两者共享 ② 若与另一个实例化的变量匹配,也变成了实例化的变量,且两者同值 ③ 若与常量匹配,也变成了实例化变量,并取常量的值 第三、常量只能与相同的常量匹配 第四、实例化的变量与另一个实例化的值相同的变量匹配,也可以与另一个未实例化的变量匹 配,使另一个变量实例化,且约束值相同 5 常用内部谓词内部谓词:Prolog系统本身定义的一些基本谓词 注意:可以直接使用,用户不能修改 ①算术运算 算术表达式由操作数(数、变量)、操作符和括号组成 算术运算符号: “+、-、 * 、/”(加减乘除) 优先级:与通常的数学运算一致 形式:中缀:X+Y*Z 前缀:+(X, *(Y,Z)) ②比较谓词 eq(X, Y) X=Y ne(X, Y) XY gt(X, Y) X>Y ls(X, Y) X0. 目标段(goal) 必须书写一个目标段,作为源码的一部分(内部 目标) 外部目标 例 Goal likes(tom, X). 注释: 多行注释:/* …… */ (C/C++中采用的符号) 单行注释:% (Matlab中采用的符号 Visual Prolog 程序的基本结构: domains ……(说明变量类型,无句号) Predicates ….. (说明谓词,无句号) clauses ….. (程序段,必须有句号) goal …… (目标或问题,必须有句号)
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |