This comment is reply for 3168 yohei: 2分探索で. --- 処理時間 ---...(ソートするコードの生成). Go to thread root.
yohei #3172(2007/09/26 03:55 GMT) [ Prolog ] Rating0/0=0.00
冗長なコードを消して整理しました. (特に,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.
Rating0/0=0.00-0+
[ reply ]
yohei
#3172()
[
Prolog
]
Rating0/0=0.00
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.Rating0/0=0.00-0+