2

我有一个返回 int*int 的程序

(示例用于说明目的): fun program(a,b) = (1,2)

我想做一些事情:

fun program(a,b)
if a = 0 then (1,2)
else
val x,y = program(a-1,b)
return (x-1, y)

基本上,我想操作返回的元组,然后返回它的修改。

谢谢

4

2 回答 2

1

这几乎完全按照您编写的方式工作,只是您的语法有点偏离:

fun program(a,b) =
  if a = 0 then (1,2)
  else
    let val (x,y) = program(a-1,b) in
      (x-1, y)
    end

具体来说:

  1. 函数由fun f args = body- 您省略了=.
  2. 变量与 绑定 let val foo = bar in baz end
  3. sml中没有return关键字。
于 2010-09-17T04:21:27.530 回答
0

我还想建议,虽然您需要返回一个 type t : int * int,但您至少 可以将输入从 : 库化到您的函数中int * int = int -> int。如果你需要把它转回来,你总是可以uncurry。我建议将函数编写为:

fun program a b =
   if a = 0 
   then (1,2)
   else
       let
           val (x,y) = program (a - 1) b
       in
           (x - 1, y)
       end

这个函数的类型是:int -> int -> (int * int)

于 2017-08-16T23:57:20.317 回答