【问题标题】:OCaml: bound expressions v. functionsOCaml:绑定表达式与函数
【发布时间】:2010-11-29 21:29:56
【问题描述】:

这里有一个函数定义:

let f x = x + 3;;

这是一个表达式:

let g = 4;;

g 可以被认为是不带参数的常量函数吗?有什么区别吗?

【问题讨论】:

    标签: function functional-programming expression ocaml


    【解决方案1】:

    是的 - 从完全功能的角度来看(就像在 Haskell 中实践的那样),一切都是功能(Really everything)。

    而且由于纯函数式语言不允许任何类型的更改,因此该定义不存在任何矛盾。

    有什么不同吗?

    嗯,OCaml 不是纯函数式的。这意味着函数可以执行与常量值的定义略有不同的副作用。

    此代码(此处为 F# - 但在 Caml 中非常相似)将完全有效。

    let name = 
        Console.Write("Enter your Name: ")
        Console.ReadLine()
    

    【讨论】:

    • 最后一个例子的重点是变量定义中的副作用只能执行一次
    【解决方案2】:

    两者的区别

    let f() = expr
    

    let f = expr
    

    在非纯语言中,在前一种情况下,“expr”的“效果”在每个“调用站点”运行,而在后一种情况下,只在定义站点运行一次。这是两者之间为数不多的区别之一,但也许是最重要的。

    【讨论】:

      【解决方案3】:

      从技术上讲,变量的定义是模式匹配:

      let [x] = someList
      let y::zs = someList
      let (Some z) = someOption
      let _ = someIgnoredExpr
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-31
        • 1970-01-01
        • 1970-01-01
        • 2019-11-19
        • 1970-01-01
        • 2012-04-18
        • 1970-01-01
        相关资源
        最近更新 更多