【问题标题】:setof with compound predicate带有复合谓词的集合
【发布时间】:2017-03-12 02:53:27
【问题描述】:

我在prolog作业中遇到一个问题。

所以,我在 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)].

为了解决这个问题,我想用prologsetof/3,所以我来了以下谓词。

returnAllMarks(C,H,L):- setof(L,mark(C,_,H,X),[L|X]).

这似乎不起作用,谓词总是返回 false。我怀疑这可能是因为我对复合谓词使用 setof,但我可能是错的(我仍处于学习 prolog 的早期阶段)。

你们有什么想法吗?我从各个角度看这个问题,我就卡在这里了。

谢谢。

【问题讨论】:

    标签: prolog prolog-setof


    【解决方案1】:

    你可以这样写:

    returnAllMarks(C,H,L):- setof( (X,Y), mark(C,X,H,Y), L).
    

    例子:

    ?- returnAllMarks('CSI1120',homework(1),L).
    L = [ (33332, 3.5), (33336, 4.0)].
    

    【讨论】:

      猜你喜欢
      • 2013-08-11
      • 1970-01-01
      • 2017-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-17
      • 2010-10-07
      • 2021-08-22
      相关资源
      最近更新 更多