Comment detail

ソートするコードの生成 (Nested Flatten)

This comment is reply for 3168 yohei: 2分探索で. --- 処理時間 ---...(ソートするコードの生成). Go to thread root.

冗長なコードを消して整理しました.
(特に,findall が無意味に入ってしまっていたので)
それと,タグに付け忘れましたが SWI-Prologです.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
mid(X, M, L, R) :- 
    length(X, N), N1 is N // 2,
    nth0(N1, X, M), append(L, [M|R], X).

gen_if([], [], N) :- !, format('~n~t~*|', [N]).
gen_if( _,  _, N) :- format('~n~t~*|(', [N]).

gen_else([], [], N) :- !, format(';~n~t~*|', [N]).
gen_else( _,  _, N) :- format('~n~t~*|);~n~t~*|', [N, N]).

gen(L, [], R, [X], _) :- !,
    append(L, [X|R], S), format('write(~p)', [S]).
gen(L, [], R, [X|Xs], N) :- !,
    append(L, [X|R], C), gen([], C, [], Xs, N).
gen(L, C, R, [X|Xs], N) :- N1 is N + 2, 
    mid(C, M, CL, CR), format('~p < ~p,', [M, X]),
    gen_if(CR, Xs, N), flatten([L, CL, M], L1),
    gen(L1, CR, R, [X|Xs], N1), gen_else(CR, Xs, N),
    append([M|CR], R, R1), gen(L, CL, R1, [X|Xs], N1).

gensort(N) :- N > 1, tell('my_sort.pl'),
    sub_atom('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 0, N, _, A),
    atom_chars(A, [X|Xs]), concat_atom([X|Xs], ', ', T),
    format('sort~d(~p) :-~n  ', [N, T]),
    gen([], [X], [], Xs, 4), writeln('.'), told.

Index

Feed

Other

Link

Pathtraq

loading...