J'ai un fichier « linguagens.pl » où son code est comme ceci:Prolog Liste, à la recherche de la langue avec plus prédécesseurs
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').
mais plus grand. linguagem (nom, année) et predecessora (langue L1, langue L2 qui précède L1).
Maintenant, j'ai besoin de trouver la langue L qui a plus de prédécesseurs.
?- lingcommaispre(L).
L = 'Swift'.
Jusqu'à présent, j'ai essayé ceci:
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).
Mais il ne fonctionne pas. Ce que j'essaie de faire est de trouver tout le prédécesseur d'une langue L et de la mettre dans une liste, donc j'obtiens la longueur de cette liste et la compare avec la longueur de la liste précédente.
S'il vous plaît, aidez-moi.