1
我有一個文件「linguagens.pl」的語言,其中的代碼是這樣的:Prolog的名單,尋找更多的前輩
linguagem('Flow-matic',1957).
linguagem('Fortran I',1957).
linguagem('Fortran II',1958).
linguagem('Algol 58',1958).
linguagem('Lisp',1959).
predecessora('COBOL','Flow-matic').
predecessora('Fortran II','Fortran I').
predecessora('Algol 58','Fortran I').
predecessora('Algol 60','Algol 58').
predecessora('Fortran IV','Fortran II').
但更大。 linguagem(姓名,年份)和predecessora(語言L1,語言L2在L1之前)。
現在,我需要找到具有更多前輩的語言L.
?- lingcommaispre(L).
L = 'Swift'.
到目前爲止,我嘗試這樣做:
n_predecessoras(L, List) :- setof(P, predecessora(L, P), List).
lingcommaispre_aux([], _, L, L).
lingcommaispre_aux([H|T], N1, L1, L) :- n_predecessoras(H, Lista2),
length(Lista2, N2),
N1 >= N2,
lingcommaispre_aux(T, N1, L1, L).
lingcommaispre_aux([H|T], N1, _ , L) :- n_predecessoras(H, Lista2),
length(Lista2, N2),
N1 < N2,
lingcommaispre_aux(T, N2, H , L).
lingcommaispre(L) :- findall(L1, linguagem(L1, _), Lista),
lingcommaispre_aux(Lista, -1, _, L).
但它不工作。我想要做的是:找到一個語言L的所有前任,並將它放在一個List中,所以我得到這個列表的長度,並將它與前一個語言列表的長度進行比較。
請幫幫我。