2017-08-14 5 views
0

Besoin de savoir ce que sont ces L1, [H1 | L2]. Aucune idée du tout.Besoin d'explication sur ce codage de tri à bulles Prolog SWI

bubSort([],[]) :- !. 
bubSort([H],[H]) :- !. 
bubSort(L,SL) :- append(L1, [H1,H2|L2], L), H2 < H1, append(L1, [H2,H1|L2], NL), !, 
       bubSort(NL,SL). 
bubSort(L,L). 

Ceci compile et trie bien la liste. Mais j'ai besoin de comprendre ce mécanisme. Spécialement comment fonctionne ce append.

+1

Explication sur quoi? L'algorithme de tri à bulles? C'est bien expliqué ailleurs. "append" prédicat? C'est dans la documentation de SWI Prolog. –

+0

'append (A, B, C)' signifie que 'B' ajouté à' A' est 'C'. Ou, de manière équivalente, 'A' concaténé avec' B' est 'C'. – lurker

+0

Besoin de savoir ce que sont ces L1, [H1 | L2]. Aucune idée du tout – Indrajith

Répondre

0
  • L1: une variable logique (le nom évocateur d'une "liste")
  • L1 = [H1 | L2]: la liste L1 a H1 comme son élément de tête, et L2 est une liste de tout le reste de ses éléments
  • append(L1, [H1,H2|L2], L): la liste L se compose des éléments d'une liste L1, l'élément H1, l'élément H2, et les éléments de la liste L2 après que
  • H2 < H1: une valeur arithmétique visée par la variable logique H2 est plus petit en grandeur à la valeur arithmétique visée par la variable logique H1
  • append(L1, [H2,H1|L2], NL): la liste NL est constitué par les éléments d'une liste L1, alors l'élément H2 , l'élément H1, et les éléments de la liste après que L2
  • bubSort([],[]) :- !.bubSort d'une liste vide [] est une liste vide, []
  • bubSort([H],[H]) :- !.bubSort d'une liste singleton [H] (une liste avec un seul élément, H, en elle) est une liste singleton [H], à savoir la même liste
  • bubSort(L,SL) :- append(L1, [H1,H2|L2], L), H2 < H1, append(L1, [H2,H1|L2], NL), !, bubSort(NL,SL).: bubSort d'une liste, appelez L, est une liste, appelez-le SL (pour "liste triée"), de sorte qu'il existe deux éléments adjacents dans L qui sont en panne, la liste NL est exactement la même chose que L juste avec ces deux éléments adjacents échangés, et le bubSort de NL est SL
  • bubSort(L,L).: enfin, s'il n'y a pas deux éléments adjacents qui sont en désordre, bubSort d'une telle liste est la liste elle-même.

voir aussi: How do I append lists in prolog?