Prolog - 为什么会员/ 2不在这里工作?

时间:2017-02-23 10:43:39

标签: prolog member

我不知道为什么这不起作用......这是代码。

cameToTheParty(date(15,9,2011), flor).
cameToTheParty(date(22,9,2011), marina).
cameToTheParty(date(15,9,2011), pablo).
cameToTheParty(date(22,9,2011), pablo).
cameToTheParty(date(15,9,2011), leo).
cameToTheParty(date(22,9,2011), flor).
cameToTheParty(date(15,9,2011), fer).
cameToTheParty(date(22,9,2011), mati).

cameToThePartyThatDay(Peoples, Date):-
    bagof(X,cameToTheParty(Date,X),Peoples).

当我尝试

?- cameToThePartyThatDay(People,Day).

它说

 People = [flor, pablo, leo, fer],
 Day = date(15, 9, 2011) ; 
 People = [marina, pablo, flor, mati], 
 Day = date(22, 9, 2011).

但是,当我尝试使用变量日期字段或实际日期时,如...

member(X,cameToThePartyThatDay(People,date(15,9,2011))).

它只是说

  

假。

2 个答案:

答案 0 :(得分:3)

member(X,cameToThePartyThatDay(People,date(15,9,2011)))

是使用member/2的错误方法,因为

cameToThePartyThatDay(People,date(15,9,2011))

不是列表。

正确的方法可能是

cameToThePartyThatDay(People, date(15, 9, 2011)),
member(X, People)

答案 1 :(得分:3)

对于Prolog,以下表达式中的粗体部分:

member(X,cameToThePartyThatDay(People,date(15,9,2011))).

来电。事实上,谓词不是函数:它们不返回任何东西。根据Prolog的说法,粗体部分是仿函数

为了让它发挥作用,您首先拨打cameToThePartyThatDay,然后在People谓词中使用member/2,例如:

cameToThePartyThatDay(People,date(15,9,2011)),
member(X,People).