3

我是学习序言的新手,我想知道,如果我们有一些类似的程序

father("Nic","Adam").  

我想编写一个函数,它将为此添加新值

father("Nic","Adam","something"..) 

我怎样才能做到这一点?使用列表?或者是什么?

4

2 回答 2

1

快速回答:你不想那样做。

更长的答案:father/2谓词具有一定的含义,即 forfather(X,Y) X是 的父亲Yfather/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].
于 2010-03-24T12:59:11.697 回答
0

简单地写

father(nic, adam). 

作为谓词已经定义了它。这就像陈述一个事实:您声明that father(nic, adam)is true,然后您可以使用这些预期结果执行以下操作:

?- father(nic, adam).
Yes

?- father(nic, X).
X = adam
于 2010-03-24T12:56:30.763 回答