このディレクトリの索引
#  出題場所:: http://toro.2ch.net/test/read.cgi/tech/1357191974/435
#  お題:1から100をチャンパーノウン定数での出現順に(出現位置が同じ場合は 
#  元のデータの順に)表示する。

'1から100をチャンパーノウン定数での出現順に(出現位置が同じ場合は元のデータの順に)表示する。' :-
        '1から100をチャンパーノウン定数での出現順に(出現位置が同じ場合は元のデータの順に)'(_整列した_開始位置_数値定数ならび),
        表示する(_整列した_開始位置_数値定数ならび).

'1から100をチャンパーノウン定数での出現順に(出現位置が同じ場合は元のデータの順に)'(_整列した_開始位置_数値ならび) :-
        findall([_開始位置,_数値],(
        between(1,100,_数値),
                    atom_number(_数値定数,_数値),
                    チャンパーノウン定数に出現(_数値定数,_開始位置)),
                 _開始位置_数値ならび),
        sort(_開始位置_数値ならび,_整列した_開始位置_数値ならび).

チャンパーノウン定数に出現(_数値定数,_開始位置) :-
        チャンパーノウン定数の生成(1,'0.1',_チャンパーノウン定数),
        sub_atom(_チャンパーノウン定数,_開始位置,_,_,_数値定数),!.

チャンパーノウン定数の生成(_数値,_チャンパーノウン定数,_チャンパーノウン定数).
チャンパーノウン定数の生成(_数値_1,_チャンパーノウン定数_1,_チャンパーノウン定数) :-
        _数値_2 is _数値_1 + 1,
        atom_number(_数値定数,_数値_2),
        atom_concat(_チャンパーノウン定数_1,_数値定数,_チャンパーノウン定数_2),
        チャンパーノウン定数の生成(_数値_2,_チャンパーノウン定数_2,_チャンパーノウン定数).

表示する(_整列した_開始位置_数値ならび) :-
        forall(member([_,_数値],_整列した_開始位置_数値ならび),writef('%t\n',[_数値])).