このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1274827528/695
#  [1] 授業単元:プログラム実習 
#  [2] 問題文(含コード&リンク):2次元配列を使って2点を結ぶ線分を引くプログラムを書く 
#  

'2次元配列を使って2点を結ぶ線分を引く'(M1,M2,X1,X2,Y1,Y2,LL) :-
        '2次元配列を生成'(M1,M2,LL),
        A is (X2-X1) / (Y2-Y1),
        B is Y1 - A * X1,
        for(X1,X,X2),
        Y is truncate(A * X + B),
        Xp is X + 1,Yp is Y + 1,
        '2次元配列を要素位置指定により置換'(Yp,Xp,LL,'*'),
        X = X2.

'2次元配列を生成'(M1,M2,LL) :-
        findall(L,(for(1,M,M1),list_lenth(L,M2),all(L,' ')),LL),!.

'2次元配列を要素位置指定により置換'(M,N,A,LL1,LL2) :-
        list_nth(M,LL,L),
        要素番号によるならびの置換(N,A,L,L1),
        要素番号によるならびの置換(M,L1,LL,LL2).

要素番号によるならびの置換(E,E,U,[A|R],[U|R]) :- !.
要素番号によるならびの置換(S1,E,U,[A|R],[A|R1]) :- S2 is S1 + 1,要素番号によるならびの置換(S2,E,U,R,R1).

要素番号によるならびの置換(Pos,U,L1,L2) :- 要素番号によるならびの置換(1,Pos,U,L1,L2).