2
我正在用prolog分配一个问题。带复合谓词的集合
所以,我有以下事实数据库序言:
student(name(doe, [john]), 33332, ['CSI1120']).
student(name(doe, [jane]), 33336, ['CSI1120']).
evaluation('CSI1120', homework(1), ['Prolog', database ], 5).
mark('CSI1120', 33332, homework(1), 3.5).
mark('CSI1120', 33336, homework(1), 4.0).
我在这里的目标是创建一个谓词listAllMarks/3
如
?- returnAllMarks('CSI1120',homework(1),L).
返回:
L= [(33332, 3.5), (33336, 4.0)].
在为了解决这个问题,我正在考虑使用序言setof/3
,所以我带着以下谓词来。
returnAllMarks(C,H,L):- setof(L,mark(C,_,H,X),[L|X]).
这似乎不起作用,谓词总是返回false。我怀疑这可能是由于我使用setof反对复合谓词的事实,但我可能是错的(我还处于学习序言的早期阶段)。
你们有没有想法?我看着从各个角度这个问题,我在这里停留
谢谢