このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1312201995/629
#  [1] 授業単元:アルゴリズム  
#  [2] 問題文(含コード&リンク):  
#   scanf により n を受け取り, n×n 行列を二次元乱数配列で定 義する (二次元乱数配列の作成には下記の参考プログラムを利用せよ). その行列の対角より下の成分の和を求めよ. ただし乱数の範囲は 0 〜 3 とする. 
#  

'n を受け取り, n×n 行列を二次元乱数ならびで定 義する (二次元乱数ならびの作成には下記の参考プログラムを利用せよ). その行列の対角より下の成分の和を求める. ただし乱数の範囲は 0 〜 3 とする'(_n,_対角より下の成分の和) :-
        'n×n 行列を二次元乱数ならびで定 義する ただし乱数の範囲は 0 〜 3 とする'(_n,_乱数行列),
        'その行列の対角より下の成分の和を求める ただし乱数の範囲は 0 〜 3 とする'(_乱数行列,_対角より下の成分の和).

'n×n 行列を二次元乱数ならびで定 義する ただし乱数の範囲は 0 〜 3 とする'(_n,_乱数行列) :-
        length(_乱数行列,_n),
        findall(L,(
                    append(_,[L|_],LL),
                    length(L,3),
                    '乱数ならびで定義する ただし乱数の範囲は 0 〜 3 とする'(L)),
                _乱数行列).

'乱数ならびで定義する ただし乱数の範囲は 0 〜 3 とする'([]).
'乱数ならびで定義する ただし乱数の範囲は 0 〜 3 とする'([N|R]) :-
        N is random(4),
        '乱数ならびで定義する ただし乱数の範囲は 0 〜 3 とする'(R).

'その行列の対角より下の成分の和を求める'(_乱数行列,_対角より下の成分の和) :-
        'その行列の対角より下の成分の和を求める'(1,3,_乱数行列,_対角より下の成分の和),!.

'その行列の対角より下の成分の和を求める'(N,N,_,0) :- !.
'その行列の対角より下の成分の和を求める'(M,N,_行列,_総計) :-
        M2 is M + 1,
        list_nth(M2,_行列,_行),
        findsum(_値,(
                    for(1,I,M),
                    nth1(I,_行,_値)),
                _行の合計),
        'その行列の対角より下の成分の和を求める'(M2,N,_行列,_総計の一),
        _総計 is _行の合計 + _総計の一.