我是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。为什么是这样?它似乎在寻找关系,但我不明白为什么!
答案 0 :(得分:2)
在prolog中,以大写字母开头的字符串是变量。当你写parent(Joe,Josh).
时,你没有定义两个人Joe和Josh之间的关系,但你说的是父变量'Joe'和'Josh'的任何值的父关系都是正确的。
要使关系按预期工作,您必须使用小写原子(例如father(joe,josh).
),或使用带引号的原子(father('Joe', 'Josh').
)。