我是Prolog的新手,基本上有一些问题。Prolog - 列表的增量值
此代码:
listProf(L1) :-
findall((LastName,FirstName,Id), professor(Id,LastName,FirstName), L1).
L1
是一个列表,并具有以下形式下:L1(LastName,FirstName, Id)
所以现在我有一个列表L1
。我需要这一个后创建一个新的列表,即形式下: L2(LastName, FistName, NumberOfCredits)
NumberOfCredits应该由3递增如果ID在L1匹配在ID: 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').
名单形式为'L1(LastName,FirstName,Id)'没有意义。你的意思是一个列表'L1',其元素的形式是'(LastName,FirstName,Id)'? – lurker
当你说,如果'L1'中的'Id'匹配*,'NumberOfCredits'应该增加3,但是你想增加的'NumberOfCredits'的原始值来自 – lurker
是的我的意思是列表L1其元素是(LastName,FirstName,Id)。而对于NumberOfCredits,在列表扫描开始时它应该是0 – Tirvax