2017-03-12 12 views
2

私はプロローグとの課題で苦労しています。化合物述語とのセット

だから、私は、プロローグで、次の事実のデータベースを持っている:で

L= [(33332, 3.5), (33336, 4.0)]. 

:ここ

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). 

私の目標は、このような

?- returnAllMarks('CSI1120',homework(1),L). 

戻り値として述語listAllMarks/3を作成することですこの問題を解決するために、私はプロローグを利用することを考えていました、私は次の述語に来ました。

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

これは機能していないようですが、述部は常にfalseを返します。私はこれが複合語述語に対してsetofを使用しているという事実によると思われますが、私は間違っている可能性があります(私はまだプロローグの初期段階です)。

あなたはアイディアを持っていますか?私はすべての角度からこの問題を見て、私はここで立ち往生しています

はありがとう

答えて

2

あなたが何か書くことができます:。。

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)].