このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1286978599/391
#  [1] 授業単元: プログラミング 
#  [2] 問題文(含コード&リンク):入力した点から点まで直線を引くプログラミングを書く 
#  二重配列a[i][j]を使う 
#   

入力した点から点まで直線を引く :-
        write('点1のX,Y座標をカンマ区切りで入力してください : '),
        get_split_line([','],[X1,Y1]),
        write('点2のX,Y座標をカンマ区切りで入力してください : '),
        get_split_line([','],[X2,Y2]),
        A is (Y2-Y1) / (X2-X1),
        B is Y1 - A * X1,
        findall([M,Y],(
                    for(X1,M,X2),
                    Y is truncate(A * M + B)),
                Z),
        キャンバスに描画(0,199,0,199,Z,LL),
        描画(LL).

キャンバスに描画(M,Mx,_,_,_,[]) :- M > Mx,!.
キャンバスに描画(M,Mx,N1,Nx,Z,[L|R]) :-
        キャンバスに描画(M,N1,Nx,Z,L),
        M2 is M + 1,
        キャンバスに描画(M2,Mx,N1,Nx,Z,R).

キャンバスに描画(_,N1,Nx,_,[]) :- N1 > Nx,!.
キャンバスに描画(M,N1,Nx,Z,['.'|R]) :-
        member([M,N1],Z),
        M2 is N1 + 1,
        キャンバスに描画(M,N2,Nx,Z,R),!.
キャンバスに描画(M,N1,Nx,Z,[' '|R]) :-
        M2 is N1 + 1,
        キャンバスに描画(M,N2,Nx,Z,R),!.

描画([]) :- !.
描画([L|R]) :-
        append(_,[Dot|R1],L),
        write(Dot),
        R1=[],
        描画(R).