⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 array2.sml

📁 这是我们参加06年全国开源软件的竞赛作品
💻 SML
字号:
(* array2.sml * * COPYRIGHT (c) 1993 by AT&T Bell Laboratories.  See COPYRIGHT file for details. * * Two-dimensional arrays. *)structure Array2 : ARRAY2 =  struct    datatype 'a array2 = A2 of {	nrows : int,	ncols : int,	elems : 'a array      }    fun index (A2{nrows, ncols, ...}, i, j) =	  if ((i < 0) orelse (nrows <= i) orelse (j < 0) orelse (ncols <= j))	    then raise Subscript	    else (i*ncols + j)  (* array(n,m,x) creates an n*m array initialized to x.   * Raises Size, if m or n is < 0.   *)    fun array (nRows, nCols, initVal) =	  if (nCols < 0) orelse (nRows < 0)	    then raise Size	    else A2{		nrows = nRows, ncols = nCols,		elems = Array.array(nRows*nCols, initVal)	      }  (* tabulate(n,m,f) creates an n*m array, where the (i,j) element   * is initialized to f(i,j).  Raises Size, if m or n is < 0.   *)    fun tabulate (nRows, nCols, f) =	  if (nCols < 0) orelse (nRows < 0)            then raise Size	    else let	      fun mkElems (i, j, elems) = if (j < nCols)		      then mkElems (i, j+1, f(i,j) :: elems)		    else let val i = i+1		      in			if (i < nRows)			  then mkElems (i, 0, elems)			  else Array.fromList(rev elems)		      end	      in		A2{nrows = nRows, ncols = nCols, elems = mkElems(0, 0, [])}	      end  (* sub(a,i,j) returns the (i,j) element. Raises Subscript if i or j   * is out of range.   *)    fun sub (arr as A2{elems, ...}, i, j) = Array.sub(elems, index(arr, i, j))  (* update(a,i,j,x) sets the (i,j) element to x. Raises Subscript if   * i or j is out of range.   *)    fun update (arr as A2{elems, ...}, i, j, x) =	  Array.update(elems, index(arr, i, j), x)  (* return the size of the array *)    fun dimensions (A2{nrows, ncols, ...}) = (nrows, ncols)  (* project a column of the array. *)    fun column (arr as A2{elems, nrows, ncols, ...}, j) = let	  val k = index(arr, 0, j)	  in	    Array.tabulate(nrows, fn n => Array.sub(elems, k+(n*ncols)))	  end  (* project a row of the array. *)    fun row (arr as A2{elems, ncols, ...}, i) = let	  val k = index(arr, i, 0)	  in	    Array.tabulate(ncols, fn n => Array.sub(elems, k+n))	  end  end (* Array2 *)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -