Prolog编程:可废止逻辑与自然语言处理
可废止逻辑编程中的封闭世界假设
在数据库操作中,封闭世界假设(Closed World Assumption,CWA)是一个常用的概念。CWA 指的是,如果某条数据是正确的,那么它应该被包含在数据库中。
举个例子,有一个 Prolog 数据库存储了某公司员工的信息,如姓名、社保号码、职位、薪水、出生日期等。当我们查询 ?- position(jones,secretary).
得到回答 no
时,我们可以推断出 Jones 不是秘书。因为如果他是秘书,这个事实会在数据库中,查询就会成功。
再看另一个例子,我们想找出所有非秘书且年薪低于 25000 美元的员工,合适的查询是 ?- salary(X,Y), Y < 25000, \+ position(X,secretary).
。如果子目标 \+ position(X,secretary).
成功,那么 X
肯定不是秘书。但这只有在对于谓词 position/2
的 CWA 成立时才有效。需要注意的是,在调用包含 \+
的子目标时,变量 X
必须已经被绑定,否则只有当公司里没有人是秘书时,该子目标才会成功。
否定即失败(Negation-as-failure)只适用于 CWA 合理的情况。当 CWA 合理时,我们可以在 Prolog 中使用 \+
来调用它。然而,这对于 d - Prolog 来说