需要知道这些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
的工作方式。
答案 0 :(得分: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]) :- !.
的[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
中存在两个相邻的元素,它们是乱序的,列表L
与NL
完全相同,只是交换了这两个相邻的元素,而 bubSort L
的em> NL
SL
:最后,如果没有两个相邻元素出现故障,此列表的 bubSort 就是列表本身。