基本的Prolog家庭关系

时间:2014-10-15 01:28:54

标签: prolog

我是prolog的新手,希望有人可以为我解决这个问题。我想查询某人是否是父亲。所以我写了以下陈述和规则:

man(Joe).
man(Josh).
man(John).

parent(Joe,Josh).
parent(Josh,John).

father(D,K) :- man(D), parent(D,K).

我很困惑,因为当我运行查询时:

father(Joe,John).
true.

它返回true。为什么是这样?它似乎在寻找关系,但我不明白为什么!

1 个答案:

答案 0 :(得分:2)

在prolog中,以大写字母开头的字符串是变量。当你写parent(Joe,Josh).时,你没有定义两个人Joe和Josh之间的关系,但你说的是父变量'Joe'和'Josh'的任何值的父关系都是正确的。

要使关系按预期工作,您必须使用小写原子(例如father(joe,josh).),或使用带引号的原子(father('Joe', 'Josh').)。