iterate.sml

来自「这是我们参加06年全国开源软件的竞赛作品」· SML 代码 · 共 43 行

SML
43
字号
(* iterate.sml * * COPYRIGHT (c) 1993 by AT&T Bell Laboratories.  See COPYRIGHT file for details. * *)structure Iterate : ITERATE =  struct    fun badArg (f,msg) = LibBase.failure {module="Iterate",func=f,msg=msg}    fun iterate f cnt init = let           fun iter (0,v) = v            | iter (n,v) = iter(n-1,f v)          in            if cnt < 0               then badArg ("iterate","count < 0")              else iter (cnt,init)          end            fun repeat f cnt init = let           fun iter (n,v) = if n = cnt then v else iter(n+1,f(n,v))          in            if cnt < 0               then badArg ("repeat","count < 0")              else iter (0,init)          end            fun for f (start,stop,inc) = let          fun up (n,v) = if n > stop then v else up(n+inc,f(n,v))          fun down (n,v) = if n < stop then v else down(n+inc,f(n,v))          in            if start < stop              then if inc <= 0 then badArg ("for","inc <= 0 with start < stop")              else fn v => up(start,v)            else if stop < start              then if inc >= 0 then badArg ("for","inc >= 0 with start > stop")              else fn v => down(start,v)            else fn v => f(start,v)          end  end (* Iterate *)

⌨️ 快捷键说明

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