【问题标题】:New to ML: How to store return values of type a* a* a*ML 新手:如何存储 a* a* a* 类型的返回值
【发布时间】:2017-08-17 07:57:20
【问题描述】:

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

(示例用于说明目的): 有趣的程序(a,b) = (1,2)

我想做一些事情:

有趣的节目(a,b)
如果 a = 0 则 (1,2)
其他
val x,y = 程序(a-1,b)
返回 (x-1, y)

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

谢谢

【问题讨论】:

    标签: functional-programming sml smlnj


    【解决方案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关键字。

    【讨论】:

      【解决方案2】:

      我还想建议,虽然您需要返回一个类型 t : int * int,但您可以至少curry输入到您的功能来自: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-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-06
        • 2016-04-27
        • 2011-10-26
        • 2015-04-08
        相关资源
        最近更新 更多