第二篇人工智能程序设计语言
2.2.3 基本函数(2)
APPEND函数
格式 (APPEND<表1> <表2>…… <表n> ) 功能 将n个表中的元素合并成一个新表。 格式 (LIST<S-表达式1> <S-表达式1> <S-表 达式1> ) 功能 将n个表中的元素合并成一个新表。
LIST函数
2.2.3 基本函数(3)
耦合型
LOGLISP。在LISP的基础上增加了表达合一、回 溯机制的系统函数。 FUNLOG。在PROLOG的基础上怎家了函数定义 机制,系统以归结语义执行PROLOG程序。 POPLOG。是POP-11、PROLOG、LISP的混合 型语言。 具有归结语义的函数型语言 集成式语言(LEAF、APPLOG)
2.3.2PROLOG程序的运行机理(1)
POROLOG程序运行机理是基于归结原理的演 绎推理。PROLOG程序的运行是从目标出发, 并不断进行匹配、合一、归结,回溯,直到目 标被完全满足。 自由变量与约束变量
2.1.3面向对象语言
面向对象语言信息隐蔽、封装、继承、 多态、消息传递,改善了软件的复杂性、 模块性、重用性和可维护性。 面向对象程序设计的类、对象、继承等 概念与人工智能的知识表示和知识库联 系紧密。 Smalltalk、C++、Java
2.1.4混合型语言(1)
函数型与逻辑型相结合
2.2.4 自定义函数(2)
例2.1 定义求N!的LISP函数。 阶乘的公式是 n!=n×(n-1)! 1!=1 0!=1 由此我们给出其LISP函数如下: (DEFUNN!(n) (COND((=n 0)1) ((=n 1)1) (T(* n(N!(- n 1))))))
2.2.4 自定义函数(3)
相等谓词EQUAL
格式 (EQUAL<参数><参数>) 功能 判断两个参数是否逻辑相等。
格式 (NULL<参数>) 功能 判断参数是否为空表,是则返回T,否则 返回NIL
判空表函数NULL
2.2.3 基本函数(5)
条件函数
格式
(COND(P1e1)
(P2e2) …… (Pnen) 功能控制程序流程
规则(rule)
格式 < 谓词名 >(< 项表 >):-< 谓词名 >(< 项 表>){,<谓词名>(<项表>)}.
其中“:-”号表示“if”(也可以直接写为if), 其左部的谓词是规则的结论(亦称为头), 右部的谓词是规则的前提(亦称为体), {}表示零次或多次重复, 逗号表示and(逻辑与), 规则的形式是一个逻辑蕴含式。
2.2.5 程序举例(2)
D-RULE是一个获取给定操作符的微分规则的 LISP 函数。微分规则的存放,是通过为相应操 作符建立d特性的方法完成的。D-RULE的定义 为
(DEFUN D-RULE(operator) (GET operator′d))
其中操作符 d 的特性值需事先用 SETF 函数建立 好。例如对于操作符加+和乘·,在数学上有
功能 一般表示对象间的因果关系、蕴含关 系或对应关系。 特殊情况规则中的谓词也可以只有谓词名而 无参量。
2.3.1PROLOG的语句(5)
问题(question)
格式?-<谓词名>(<项表>){,<谓词名>(<项 表>)}. 例如: ?-student(john).
?-like(mary,X).
就是两个合法的问题。 功能 问题表示用户的询问,它就是程序运行 的目标。
2.3.2PROLOG程序(1)
PROLOG程序有一组事实、规则和问题组成。 例子
likes(bell,sports). likes(mary,music). likes(mary,sports) likes(jane ,smith). friend(john,X):likes(X,reading),likes(X,music). friend(john,X):likes(X,sports),likes(X,music). ?-friend(john,Y).
第一个程序设计语言
1960年美国麦卡锡和他的研究小组设计实现 LISP(LISt Processing),是一种表处理语言。
2.1综述
函数型语言 逻辑型语言 面向对象语言 混合型语言
2.1.1函数型语言
典型代表LISP LISP程序由一组函数组成,程序的执行过 程就是一系列的函数调用和求值过程。 纯函数型程序设计语言FP
统一型
2.1.4混合型语言(2)
函数型与面向对象相结合的语言
Flavors LOOPS CommonLoops CLOS CommonObjects OBJ2
2.1.4混合型语言(3)
逻辑型与面向对象相结合的语言
SPOOL Orient 84k Vulan
2.2.2 S-表达式(2)
表
表是LISP语言中最常用的数据类型,也是主要的处 理对象。 表由圆括号括起来得由空格分开的若干元素的集合。 表的一般形式为:
(<S-表达式>< S-表达式>…< S-表达式>) 表是一种特殊的S-表达式 (A ) (A•NIL) (A B) (A • (B•NIL)) (A B C) (A • B •(C•NIL)) (A B C D) (A • B •C(D•NIL))
事实的形式是一个原子谓词公式。 例如:
student(john). like( mary ,music).
2.3.1PROLOG的语句(2)
功能 一般表示对象的性质或关系。 作为特殊情形,一个事实也可以只有谓词名 而无参量。
例如: abc. repeat.
2.3.1PROLOG的语句(3)
第二章 人工智能程序设计语言
目录
2.1综述 2.2函数型程序设计语言LISP 2.3逻辑型程序设计语言PROLOG 2.4Turbo PROLOG程序设计
2.1综述(1)
人工智能解决的问题
人工智能解决的问题是实现对脑功能的模拟和再 现,人工智能程序要面向问题、面向逻辑,要能支持 知识表示,能描述逻辑关系和抽象概念,其处理对象 更多是知识,或者说是符号。
2.3 逻辑型程序设计语言PROLOG
PROLOG的语句 PROLOG程序 PROLOG程序的运行机理
2.3.1PROLOG的语句(1)
事实
格式<谓词名>(<项表>).
谓词名是以小写英文字母打头的字母、数字、下划线等组 成的字符串 项表是以逗号隔开的项序列。 项包括由常量或变量表示的简单对象以及函数、结构和表。
2.1.2逻辑型语言
典型代表PROLOG(PROgramming in LOGic) PROLOG程序是陈述性语言,不需要告 诉计算机“怎么做”,只需要告诉计算 机“做什么”。 PROLOG语言是以Horn子句逻辑为基础 的程序设计语言,是目前最具代表性的 一种逻辑程序设计语言。 PARLOG、Concurrent PROLOG、GHC
LISP的程序结构与运行机制 S-表达式 基本函数 自定义函数 程序举例
2.2.1LISP的程序结构与运行机制(1)
LISP程序结构
函数的定义
(DEFUN (<函数名>(<形参表>)<函数名>) (<函数名>(<形参表>)<函数名>) … (<函数名>(<形参表>)<函数名>) (<函数名> <实参表>) … (<函数名> <实参表> )
2.2.4 自定义函数(1)
自定义函数的格式为: (DEFUN<函数名>(<形参表>) <函数体>) 函数体,是用户自定义的函数或LISP基本 函数的某种组合。 一般来讲,LISP自定义函数就是由其基本 函数组合而成的。常用的组合方法有复 合、分支、递归、迭代等。其中最具特 色的构造方法是递归。
d(u+v)/dx=du/dx+dv/dx d(u· v)/dx=v· du/dx+u· dv/dx
2.2.5 程序举例(3)
用LISP表示就是
(SETF(GET′+′D)′(LAMBDA(u v x)′(+,(Dux),(D v x)))) (SETF(GET′*′D)′(LAMBDA(u v x)′(+(*,(D u x),v)(*,(D v x),u))))) 给出如下的函数调用(D′(+(*2x)(*x x))′x);即求一 元函数2x+x 2关于x的导函数则得到返回值为 (+(+(* 0 x)(* 1 2))(+(* 1 x)(*1 x))) 即2+2x,结果正确。
2.3.1PROLOG的语句(4)
例如: bird(X):-animal(X),has(X,feather). “如果X是动物,并且X有羽毛,则X是鸟” grandfather(X,Y):-father(X,Z),father(Z,Y). “X是Y的祖父,如果存在Z,X是Z的父亲并且Z 又是Y的父亲”。 就是PROLOG的合法规则。