- 签证留学 |
- 笔译 |
- 口译
- 求职 |
- 日/韩语 |
- 德语
基于程序的技术通常在数据库查询程序中使用。在这种应用中,逻辑形式语言和数据库语言的表达能力有很大的差别。知识库(即数据库)只包含肯定文字命题,通常不包含变量。在这种情况下,一般做法不是将逻辑形式语言转化成本节先前描述的扩展的一阶谓词演算,而是将逻辑形式当成用查询语言构造的表达式来处理。每个逻辑形式语言结构对应一个执行适当查询的特定过程。例如,查询“Does every flight to Chicago serve breakfast?”(是否每一趟飞往Chicago的航班都提供早餐?)的逻辑形式语言为:
(EVERY f1 : (& (FLIGHT f1) (DEST f1 (NAME c1 "Chicago")))
(SERVE-BREAKFAST f1))
可以解释为如下过程:
1. 在数据库中找出所有目的地为CHI(数据库中表示Chicago的符号)的航班。
2. 对找到的每个航班,检查是否提供早餐。如果都提供,返回是;否则返回不是。
此文说明了如何将逻辑形式的表达式解释为过程的方法,这种方法常称为程序语义学 (procedural semantic)。
为了更清楚地了解这个过程,我们先分析图1所示的简单数据库查询系统。这个数据库由一组不含变量的肯定文字命题组成。时间用国际表示法来表示;比如1700HR表示下午5:00。关系(ATIME fct)表示航班f在时刻t到达机场c,而(DTIME fct)表示航班f在时刻t离开机场c。这个数据库系统提供一个基于文字命题的模式匹配的简单接口,其中,查询中可能包含变量。假定现在有两个数据库查询函数:
(Test
(Retrieve
例如,已知图1 的数据库,查询:
(Retrieve ?x (FLIGHT ?x) (ATIME ?x CHI 1000HR))
将返回列表(F2),因为F2是 ?x的惟一约束,使得这两个文字命题都在数据库中。
图1 一个简单的航班时刻表数据库
用逻辑形式语言表示的所有表达式必须用一种特定的方法来解释,按照这种方法,这些表达式最终都简化为这个数据库的两种查询形式。简化的方法是通过将逻辑形式映射为对数据库执行适当查询的过程。因此,回答一个问题可以通过两个步骤来完成:将逻辑形式转换为一个程序,然后执行该程序,计算得到答案。