このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1308749241/356
#  [1] 授業単元:C言語演習 
#  [2] 問題文(含コード&リンク): 
#  幅が15程度の1次元の領域を考える. 
#  その領域の中央に1匹の虫を放つ. 
#  虫は単位時間あたり距離1だけ左に行ったり右に行ったり,あるいは止まっていたりする. 
#  10単位時間経過時の虫の居場所をint型1次元配列の該当位置に1を加えるという形で記録してゆく. 
#  以上を1試行とし,計100試行程繰り返した段階での,虫の最終位置をカウントした配列内の中身を表示する. 
#  

'虫の動きを記録して、100試行程繰り返した段階での,虫の最終位置をカウントしたならびを表示する' :-
        '10単位時間経過時の虫の居場所をint型1次元配列の該当位置に1を加えるという形で記録してゆく.'(15,L),
        グラフとして表示する(L).

'10単位時間経過時の虫の居場所をint型1次元配列の該当位置に1を加えるという形で記録してゆく.'(_幅,L) :-
        length(L,_幅),
        all(L,[]),
        'その領域の中央に1匹の虫を放つ.'(_幅,Nth),
        '10単位時間経過時の虫の居場所をint型1次元配列の該当位置に1を加えるという形で記録してゆく.'(0,_幅,Nth,L,LX).

'10単位時間経過時の虫の居場所をint型1次元配列の該当位置に1を加えるという形で記録してゆく.'(100,_幅,Nth,L1,L) :-
        length([_|L0],Nth),
        append(L0,[LenL|R],L1),
        append(L0,[[_|LenL]|R],L),!.
'10単位時間経過時の虫の居場所をint型1次元配列の該当位置に1を加えるという形で記録してゆく.'(_単位時間,_幅,Nth,L1,L) :-
        0 is _単位時間 mod 10,
        length([_|L0],Nth),
        append(L0,[LenL|R],L1),
        append(L0,[[_|LenL]|R],L2),
        '虫は単位時間あたり距離1だけ左に行ったり右に行ったり,あるいは止まっていたりする.'(_幅,Nth,Nth_2),
        _単位時間_2 is _単位時間 + 1,
        '10単位時間経過時の虫の居場所をint型1次元配列の該当位置に1を加えるという形で記録してゆく.'(_単位時間_2,_幅,Nth_2,L2,L).

'その領域の中央に1匹の虫を放つ.'(_幅,Nth) :-
        Nth is _幅 // 2,!.

'虫は単位時間あたり距離1だけ左に行ったり右に行ったり,あるいは止まっていたりする.'(_幅,_虫の位置,_1単位時間後の虫の位置) :-
        '単位時間後の虫の位置'(_幅,_虫の位置,_1単位時間後の虫の位置_1),
        '虫の位置補正'(_幅,_1単位時間後の虫の位置_1,_1単位時間後の虫の位置),!.

'単位時間後の虫の位置'(_幅,Nth,_1単位時間後の虫の位置) :-
        _1単位時間後の虫の位置 is random(3) * -1 + 1 + Nth,!.

'虫の位置補正'(_幅,Nth,1) :-
        Nth > _幅,!.
'虫の位置補正'(_幅,0,_幅) :- !.
'虫の位置補正'(_幅,Nth,Nth) :- !.

グラフとして表示する(LL) :-
        append(L0,[L|R],LL),
        length([_|L0],Nth),
        all(L,'*'),
        concat_atom(L,S),
        writef('[%t] : %t\n',[Nth,S]),
        R = [].