2017-08-14 63 views
0

要知道这些是什么L1[H1 | L2]解释。根本不知道。需要在这个SWI Prolog的冒泡排序编码

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). 

这编译和对列表进行排序好。但我需要了解这种机制。 特地如何append作品。

+1

说明什么?冒泡排序算法?这在其他地方很好解释。 'append'谓词?它在SWI Prolog的文档中。 –

+0

'追加(A,B,C)''意味着所附B'到'A'是'C'。或者等价地,与'B'串联的'A'是'C'。 – lurker

+0

要知道这些是什么L1,[H1 | L2]。不知道在所有 – Indrajith

回答

0
  • L1:逻辑变量(名称暗示一个“清单”)
  • L1 = [H1 | L2]:列表L1具有H1作为其头部元件,并L2是其元素
  • 的所有其余的列表
  • append(L1, [H1,H2|L2], L):列表L由列表L1的元素,则该元素H1,则该元素H2,并且该列表的L2
  • 之后的元素
  • H2 < H1:由逻辑变量H2称为算术值在数值上比由逻辑变量H1
  • append(L1, [H2,H1|L2], NL)称为算术值小:列表NL由列表L1的元素,则该元素H2的,则元件H1,并且该列表的L2空列表[]的那
  • bubSort([],[]) :- !.bubSort后的元素是一个空列表,[]
  • bubSort([H],[H]) :- !.bubSort一个单列表[H](只有一个元素,H的列表,它)的是一个单独的列表[H],即相同的列表
  • bubSort(L,SL) :- append(L1, [H1,H2|L2], L), H2 < H1, append(L1, [H2,H1|L2], NL), !, bubSort(NL,SL).bubSort列表,称之为L,是列表,称之为SL(对于“排序列表”),使得存在在L其是无序存在两个相邻元件,该列表NL是完全一样L只是调换这两个相邻的元件,并且bubSort的NLSL
  • bubSort(L,L).:最后,如果没有两个相邻的元件,其无序,这样的列表的bubSort是列表本身。

还看到:How do I append lists in prolog?