2017-08-14 248 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?