我是学习序言的新手,我想知道,如果我们有一些类似的程序
father("Nic","Adam").
我想编写一个函数,它将为此添加新值
father("Nic","Adam","something"..)
我怎样才能做到这一点?使用列表?或者是什么?
快速回答:你不想那样做。
更长的答案:father/2
谓词具有一定的含义,即 forfather(X,Y)
X
是 的父亲Y
。father/3
谓词是完全不同的东西。你想用第三个论点达到什么目的?通常,您使用附加规则,这些规则从谓词中派生出事物father/2
,甚至将其解析为father/3
参数。
主要问题仍然存在:第三个论点的目的是什么?例如,如果您希望基于相应father/2
谓词的存在来解决某些特定的第三个参数,那么father(X, Y, 'something') :- father(X,Y)
如果您有相应的father/2
事实,您可以这样做会成功。
PS:一定要学习你的术语。在 Prolog 中,我们不谈论过程,也不编写函数。相反,我们有谓词、事实、规则……
PPS:我不确定您使用的是哪个 Prolog 实现,但您可能想'something'
使用"something"
. 后者通常创建一个字符代码列表,而不是字符串:
?- X = 'some'.
X = some.
?- X = "some".
X = [115, 111, 109, 101].
简单地写
father(nic, adam).
作为谓词已经定义了它。这就像陈述一个事实:您声明that father(nic, adam)
is true
,然后您可以使用这些预期结果执行以下操作:
?- father(nic, adam).
Yes
?- father(nic, X).
X = adam