このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1320365280/260
#  [1] 授業単元: C言語プログラミング 
#  [2] 問題文(含コード&リンク): 
#  sinのグラフを次のように描くプログラムを作成せよ 
#  ただしsin90°とsin270°に対するアスタリスクの数は20個とする。 
#  http://ime.nu/beebee2see.appspot.com/i/azuYk7KSBQw.jpg 
#  

'sinのグラフを次のように描くただしsin90°とsin270°に対するアスタリスクの数は20個とする' :-
        length(_キャンパス,25),
        'キャンパスにsinカーブを描画する'(_キャンパス),
        キャンパスを表示する(_キャンパス).

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

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


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

星の位置描画(N,10,L) :-
        変数を全て置換する(N,L,L),!.
星の位置描画(N,_星の位置,L) :-
        N > 10,
        for(11,M,N),
        星を描画(M,L),
        M = N,
        変数を全て置換する(N,L,L),!.        
星の位置描画(N,_星の位置,L) :-
        N < 10,
        for(9,M,N),
        星を描画(M,L),
        M = N,
        変数を全て置換する(N,L,L),!.        

星を描画(M,L) :-
        length([_|Ln],M),
        append(L2,[*|R],L),!.

変数を全て置換する(_,[],[]) :- !.
変数を全て置換する(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).

%  
%  C153_216.html の類型
%    
%  述語 星の位置描画/3 のあたりが微妙に違う。
%  X軸、Y軸を描かなくてよいことからも差異を生じる。
%