4

単純な Prolog 挿入ソート アルゴリズムがあります。

sorting([A|B], Sorted) :- sorting(B, SortedTail), insert(A, SortedTail, Sorted).
sorting([], []).

insert(A, [B|C], [B|D]) :- A @> B, !, insert(A, C, D).
insert(A, C, [A|C]).

通常のリストではうまく機能します。

?- sorting([5, 4, 9, 1, 3, 8], X).
X = [1, 3, 4, 5, 8, 9].

しかし、それらのいずれかを含むリストのサブリストをソートする必要もあります:

?- sorting([2, 5, [5, 4, 3], [6, 3], 4, 8], X).
X = [2, 4, 5, 8, [5, 4, 3], [6, 3]].

今戻るものです。と

?- sorting([2, 5, [5, 4, 3], [6, 3], 4, 8], X).
X = [2, 4, 5, 8, [3, 4, 5], [3, 6]].

私が返す必要があるもの。では、どうすればサブリストもソートできますか? 前もって感謝します!

4

1 に答える 1

5

私はこの簡単な解決策を提供します:

ソートされたリストに要素を挿入する

insert(X, [], [X]):- !.
insert(X, [X1|L1], [X, X1|L1]):- X=<X1, !.
insert(X, [X1|L1], [X1|L]):- insert(X, L1, L).

挿入ソートアルゴリズムの原則を使用する

insertionSort([], []):- !.
insertionSort([X|L], S):- insertionSort(L, S1), insert(X, S1, S).
于 2017-01-08T14:50:18.613 に答える