J'ai une fonction Prolog path(A,B,Path)
qui donne tous les chemins valides sur une planche de A à B.Comment trouver la liste de la longueur la plus courte d'un ensemble infini (Prolog)
La sortie de cette fonction ressemble à ceci:
?- path(0,2,Path).
Path = [0, 1, 2] ;
Path = [0, 3, 2] ;
Path = [0, 1, 4, 2] ;
Path = [0, 3, 4, 2] ;
Path = [0, 1, 4, 5, 3, 2] ;
etc, etc.
Il génère un ensemble de listes infinies contenant des chemins valides. Je voudrais simplement obtenir le plus court de ces chemins (aussi nombreux soient-ils). C'est, je veux une fonction shortest(A,B,Path)
qui wil donnent les chemins les plus courts valides sur une planche de A à B.
La sortie I veux est:
?- shortest(0,2,Path).
Path = [0, 1, 2] ;
Path = [0, 3, 2] ;
false.
Je joue autour de la setof
fonctionne en Prolog pour lier tous les chemins à un ensemble où j'impose une certaine restriction de longueur, mais je n'ai pas encore réussi à le faire fonctionner.
Mon pauvre travail à ce jour ressemble à ceci. C'est certainement faux, et j'apprécierais toute aide pour comprendre comment fonctionne setof
et comment je peux trouver les listes les plus courtes de cet ensemble. Merci!
shortest(A,B,MinPath) :-
setof(Path,path(A,B,Path),MinPath),
min(length(Path), length(MinPath)).