このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1308749241/699
#  [1] 授業単元:プログラミング 
#  [2] 問題文(含コード&リンク): 
#  
#  次のプログラムにおいて,sumrangeは,M行N列の行列A = (a_{ij})(実際には,
#  大きさM×Nのint 型の2次元配列で表される)を引数として渡されると,各行の最大値から最小値を
#  引いた値の(全体での)和を返す関数である.(ここでは,C 言語の配列の添え字にならって,i, jは
#  0から始まると考えている) 例えば,M = 3, N = 4のとき,主プログラム中で,配列aの値に
#  { 7 5 -2 4
#  -3 11 -5 6
#  2 6 6 14 }が入力された場合,0行目の最大値は7,最小値は-2であり,その差は7 - (-2) = 9,
#  1行目の最大値は11,最小値は-5であり,その差は11 - (-5) = 16, 2行目の最大値は14,最小値は2であり,
#  その差は14 - 2 = 12 となるので,sumrangeは9 + 16 + 12 = 37を返す.関数sumrangeを,下記のプログラムの 
#  /* INSERT HERE */ の部分に挿入できるように書け.なお,行列の(i, j)成分は,2次元配列の[i][j]要素に
#  対応するものとせよ.また,配列中のデータは,-10000以上10000未満であると仮定してよい.
#  
#  #include 
#  #define M (適当な正整数)
#  #define N (適当な正整数)
#  /* INSERT HERE */
#  int main(void)
#  {
#  int a[M][N];
#  /* ここで a[0][0]〜a[M-1][N-1] の値を入力する */
#  printf("sumrange = %2d\n", sumrange(a));
#  return 0;
#  } 

'行列の各行の最大値から最小値を引いた値の(全体での)和を返す'(_行列,_和) :-
        findsum(_行の最大値と最小値の差,(
                    append(_,[_行|_],_行列),
                    max(_行,_最大値),
                    min(_行,_最小値),
                    _行の最大値と最小値の差 is _最大値 - _最小値),
                _和).