当前位置:
文档之家› 《AI程序设计语言》PPT课件
《AI程序设计语言》PPT课件
(T (HANO1 a c b (- n 1))
(movedisk a c)
(HANO1 b a c (- n 1)))))
(DEFUN movedisk (X Y)
(TERPR1)
(PRINTC “move disk fr回om车换”行函)数
(PRINTC X)
(PRINTC “to “)
(PRINTC Y))
Else if …
Else if Pn th en Sn
函数定义
• 格式
(DEFUN 函数名(参数1 参数2 …参数n) 函数体)
• lisp中,定义函数最常用的手段是递归定义
• 例:定义阶乘函数 0!=1 1!=1 n!=n*(n-1)!
(DEFUN
N! (n) (COND ((= n 0) 1)
Goal run(X).
• 运行时,直接显示运行结果,输出first,然后按 一个键,就结束了
• 注意:在有内部目标时,Prolog只寻找第一个解
人工智能
程序执行和匹配法则
• Prolog的程序执行过程就是不断地匹配规则,在匹配过程中对变量实例化,其实就是 谓词归结推理
• 在推理过程中,使用的是“试探-返回-再试”的回溯方法来对问题求解,也就是深度 优先的算法,顺着一条路一直往下走,直到走不下去了,就返回交叉路口,选另一条 路再试
结的形式表示,所以它又严格的数学基础
人工智能
Prolog 的特点
• 逻辑型语言 • 语句类型简单,只有三种基本形式:事实、规则、询问 • 接近于自然语言,简洁明了,易写易读 • 数据和程序结构一致(都由项构成,便于将a程序的输出作为b程序的输入) • 能自动进行匹配和回溯 • 可大量使用递归
人工智能
人工智能
谓词段
• Prolog有许多内部谓词,如read,write, makewindow等,对内部谓词不需说明 • 在程序中,若定义了自己要用的外部谓词,如上例中like,parent,则必须在谓词段
加以说明,例: Predicates like(symbol,symbol) parent(symbol,symbol)
人工智能
感谢下 载
采用模拟并行处理技术)
人工智能
常用的AI程序设计语言
• Prolog • Lisp •C • C++ • Smalltalk
人工智能
Prolog
• Prolog是Programming in Logic用逻辑进行程序设计的缩写 • 第一个Prolog系统是由Colmerauer及其研究小组于1972年在法国马赛研制成功 • Prolog是完全基于一阶谓词逻辑基础上的,它的所有语句和推理都可以用Horn子句归
Goal likes(bill,What).
人工智能
Lisp语言
• Lisp是List Processing 的缩写,是计算机的表处理语言,处理的都是符号表。1960 年由麦卡锡发明的。
• Lisp语言以1941年Church提出的λ演算为理论基础的,λ演算是与图灵机等价的一种计 算模型
• 80%的早期AI软件都是用Lisp语言写成的
人工智能
Lisp语言的基本函数
• 算数运算函数(用前缀方式表示)
• (+ 3 5)
(+ (* 3 5) (/ 4 2))
• 表处理函数
• CAR 取表的第一个元素
• (CAR ‘(a b c)) 得到a
• (CAR ‘((a b) c)) 得到(a b)
‘ 表示禁止求值
• CDR 返回除第一个元素外所有元素组成的表
Predicates own(name,articles)
Clauses own(John,book(ABC,Ding)). own(John,horse(blacky)).
• 标准域:integer,char,real,ref,string,symbol
人工智能
目标段
• 目标段输入要解决问题的语句 • 也可以省略目标段。若省略目标段,则在运行时程序会等待用户输入一个目标,然后
• 采用哪种人工语智能言进行AI程序设计是根据具体情况决定 的
• 求三个盘子的汉诺塔,则输入 (HANO1 ‘a ‘b ‘c 3)
• 输出为 Move disk from a to c Move disk from a to b Move disk from c to b Move disk from a to c Move disk from b to a Move disk from b to c Move disk from a to c
Prolog的程序结构
• Prolog程序包括常量段、域段、数据库段、谓词段、目标段和子句段;另外还可 以在程序首部设置编译指令,在程序中加注释
• 通常,一个Prolog程序不一定包括所有段,最常用的有子句段、谓词段、域段。 如果需要产生一个可独立执行的程序,还需要有目标段
人工智能
/* 注释 */ 编译指令 constants
人工智能 程序设计语言
概述
• 前面几章,我们介绍了一些运用AI技术求解问 题的一般方法。这些方法可运用于定理证明、 自然语言理解、模式识别、专家系统等各个领 域。要在计算机上实现,就涉及到计算机语言 的问题。
• 严格地讲,可以使用任何计算机语言来实现这 些算法。但是AI的主要课题是非数值计算的问 题求解和知识处理等复杂问题,主要任务在于 完成推理、规划、决策、分析、论证等智能行 为,其中包括各种符号处理和表处理等。传统 过程性语言不太适合AI方面的程序设计
((= n 1) 1) (T (* (N!(- n 1)) n))))
• Lisp的程序设计也就是定义函数,lisp的整个程 序也就是一堆函数
人工智能
例:汉诺塔问题
(DEFUN HANO1(a b c n) 盘子所在针 (CON起D中(转(作=用的n针1)(move盘d子i要s移k到a的目c标)针)
输出函数
人工智能
小结
• Prolog中所有事实和规则都是以谓词形式存放,Prolog自己提 供了一套匹配回溯的控制策略。可以说用Prolog建立AI程序, 推理部分已经在它内部实现了,我们只要用它规定的方式把各 种规则、事实写出,然后就可运行求解
• Lisp中也是一样,都以符EQUAL S1 S2) 检查S1 和S2 是否是相同的表达 式
• 输入输出函数
(READ) 等待输入
(PRINT S)输出表达式S的值
• 条件函数
( COND (P1 S1) (P2 S2) …
人工智能 (Pn Sn))
▪ 相当于
If P1 then S 1
Else if P2 th en S2
• 运行时,会在对话窗口提示输入一个目标,若输入目标run(X). 则输 出first,然后按一个键接着输出second,再按一个键,就结束了
• 外部目标运行时,Prolog寻找所有解
人工智能
目标段
Predicates run(char)
Clauses run(X):- write(“first”), readchar(X). run(X):- write(“second”), readchar(X).
人工智能
Lisp语言基本结构
•表 • 是lisp语言中最常用的结构 • 表由左括号开始,后跟任意多个由空格隔开的原子或表,最后以右括号结束 • 例: (A)、(A B C)、 (1 (2 (3)))都是表 • 表的结构是嵌套的,表中最外层元素的个数称为表长 • 例: (A (B C) (D)) 的表长为3
人工智能
Lisp语言基本结构
• Lisp语言的程序和数据具有统一的结构,就是符号表达式 (S-表达式),S-表达式的基本组成元素是原子
• 原子
• 文字原子:相当于标识符,如ABC • 串原子:引号引起的字符串,如“aaa” • 数字原子:由正负号、小数点和数字组成
• S-表达式
• 原子是S-表达式 • 若S1和S2是S-表达式,则(S1 • S2)也是S-表达式 • 例:A、(A • B)、(A • (B • C))都是正确的S-表达式 • 但 (A • B • C)、((A • B))就不是正确的S-表达式
常量说明 Domains
域语句 Database
数据库说明 Predicates
谓词语句 Goal
目标语句 Clauses
子句语句
人工智能
子句段
• 是整个程序的核心,所有的事实和规则都在子句段列出,例如 Clauses like(Bill,Cindy). like(Cindy,Bill). like(Bill,dogs). like(A,C):- like(A,B),like(B,C). parent(ZhangYi,ZhangEr).
• 设计AI程序时,也可采用C、C++等语言,但这需要我们自己来 控制每一步,需要考虑知识以什么形式、什么结构如何存放等 (可以用数组、链表、树结构、文本文件、数据库等存放知识 ),还需要考虑以什么方式来调用、管理、控制知识的运用
• 缺点:编程工作量增加
• 优点:有更大的主动权,更大的灵活性,可自由采用一些 快速的搜索、推理算法,可设计更方便美观的界面,利用 更多的系统资源
人工智能
Predicates likes(symbol,symbol) tastes(symbol,symbol) food(symbol)
Clauses likes(bill,X):- food(X),tastes(X,good). tastes(pizza,good). tastes(dumpling,bad). food(dumpling). food(pizza).
• (CONS S1 S2) 把S1作为第一元素插入S2表中