4

这里我们有一个函数定义:

let f x = x + 3;;

这是一个表达式:

let g = 4;;

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

4

3 回答 3

5

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

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

有什么区别吗?

好吧,OCaml 不是纯功能的。这意味着允许函数执行与常量值的定义略有不同的副作用。

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

let name = 
    Console.Write("Enter your Name: ")
    Console.ReadLine()
于 2009-09-20T16:02:42.790 回答
5

和...之间的不同

let f() = expr

let f = expr

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

于 2009-09-20T17:54:54.527 回答
1

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

let [x] = someList
let y::zs = someList
let (Some z) = someOption
let _ = someIgnoredExpr
于 2009-09-20T17:30:08.740 回答