我是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