我不知道为什么这不起作用......这是代码。
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))).
它只是说
假。
答案 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).