我是Prolog的新手,在基本上是一个柜台方面有一些困难。
此代码有效:
listProf(L1) :-
findall((LastName,FirstName,Id), professor(Id,LastName,FirstName), L1).
L1
是一个列表,其格式如下:L1(LastName,FirstName, Id)
所以现在我有一个列表L1
。我需要在这个之后创建一个新列表,其形式如下:
L2(LastName, FistName, NumberOfCredits)
如果L1中的Id与以下ID匹配,则NumberOfCredits应增加3:
groupeCours( _, _, _, _,Id,( _, _))
。
我想到了这一点,但显然不起作用:
profNbcredits(L) :-
findall((LastName,FirstName,NbCredits),
( listProf([(_,_,Id)]),
groupeCours( _, _, _, _,Id,( _, _)),
NbCredits is NbCredits +3
),
L).
我知道" NbCredits是NbCredits + 3"在逻辑编程中不起作用,我需要两个"变量"但我无法找到办法。 另外,我不确定:listProf([(,,Id)])。有了这个,我试图在列表listProf中获得每个三元组的Id。
你有什么想法吗?
"数据库" :
groupeCours('INF1110', 20, 32003, 100, 'TREJ4',('Thursday',1)).
groupeCours('INF1110', 30, 32003, 100, 'PASB1',('Wednesday',2)).
groupeCours('INF1130', 10, 32003, 100, 'PASB1',('Monday',2)).
professor('TREJ4', 'Tremblay', 'Jean').
professor('DEVL2', 'De Vinci', 'Leonard').
professor('PASB1', 'Pascal', 'Blaise').
professor('GOLA1', 'Goldberg', 'Adele').
答案 0 :(得分:0)
我认为你不需要listProf/1
来完成你的任务。此外,您无处可获得0
点数(0
并未出现在您的代码中的任何位置。)
虽然你的问题永远不会出现并说出你正在尝试做什么以及假设是什么,但看起来你最终还是试图确定每位教授提供的总学分,以及假设只是每门课程固定为3学分。我本来期望一个课程数据库,表明申请了多少学分,但这似乎不是你所拥有的。
这可能更有意义,然后从一个为给定教授Id提供总学分的谓词开始:
professor_total_credits(ProfId, TotalCredits) :-
findall(3, groupeCours(_, _, _, _, ProfId, _), Credits),
sum_list(Credits, TotalCredits).
然后你可以列出所有这些:
professors_total_credits(ProfTotalCredits) :-
findall((ProfLast, ProfFirst, Credits),
(professor(Id, ProfLast, ProfFirst),
professor_total_credits(Id, Credits)),
ProfTotalCredits).