需要解释这个SWI Prolog冒泡排序编码

时间:2017-08-14 09:50:24

标签: prolog append bubble-sort

需要知道这些L1[H1 | L2]是什么。根本不知道。

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 个答案:

答案 0 :(得分:0)

  • L1:逻辑变量(暗示“列表”的名称)
  • L1 = [H1 | L2]:列表L1H1为首要元素,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]) :- !.
  • [H] bubSort (其中只包含一个元素H的列表)是单个列表{{1} },即相同的列表
  • [H]:列表的 bubSort ,称之为bubSort(L,SL) :- append(L1, [H1,H2|L2], L), H2 < H1, append(L1, [H2,H1|L2], NL), !, bubSort(NL,SL).,是一个列表,称之为L(对于“排序列表”),这样SL中存在两个相邻的元素,它们是乱序的,列表LNL完全相同,只是交换了这两个相邻的元素,而 bubSort L的em> NL
  • SL:最后,如果没有两个相邻元素出现故障,此列表的 bubSort 就是列表本身。

另见:How do I append lists in prolog?