このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1320365280/216
#  [1] 授業単元:プログラミング 
#  [2] 問題文(含コード&リンク):sinカーブを縦に描画するプログラムを作れ。0度から360度までの範囲を描画し、 
#  縦軸と横軸も描画すること。 
#  

'sinカーブを縦に描画するプログラムを作れ。0度から360度までの範囲を描画し、縦軸と横軸も描画すること' :-
        length(_キャンパス,61),
        'キャンパスにsinカーブを描画する'(_キャンパス),
        キャンパスを表示する(_キャンパス).

'キャンパスを構成しながらsinカーブを描画する'(_キャンパス) :-
        findall(_キャンパス,(
                    append(L0,[L|_],_キャンパス),
                    length(L,49),
                    キャンパスに描画(L0,L)),
                _キャンパス).

キャンパスに描画(Ln,L) :-
        刻みを得る(_刻み),
        length(Ln,N),
        _星の位置 is truncate(24 * sin(_刻み * N)) + 25,
        星の位置描画(N,_星の位置,L).

刻みを得る(_刻み) :-
        _刻み is 2 * pi / 60.

星の位置描画(N,_星の位置,L) :-
        length(L0,_星の位置),
        append(L0,[*|L0],L),
        変数を全て置換する(N,L,L),!.
星の位置描画(N,_星の位置,L) :-
        length(L0,_星の位置),
        append(L1,['|'|L1],L),
        append(L0,[*|_],L),
        変数を全て置換する(N,L,L),!.

変数を全て置換する(_,[],[]) :- !.
変数を全て置換する(N,[V|R1],['-'|R2]) :-
        var(V),
        member(N,[0,15,30,45,60]),
        変数を全て空白に置換する(N,R1,R2),!.
変数を全て置換する(N,[V|R1],[' '|R2]) :-
        var(V),
        変数を全て空白に置換する(N,R1,R2),!.
変数を全て空白に置換する(N,[A|R1],[A|R2]) :-
        変数を全て空白に置換する(N,R1,R2).

キャンパスを表示する([]).
キャンパス表示する([L|R]) :-
        左端の十文字分は空白,
        一行表示する(L),
        キャンパスを表示する(R).

左端の十文字分は空白 :-
        write('          ').

一行表示する([]) :- !.
一行表示する([A|R]) :-
        write(A),
        一行表示する(R).