这里我们有一个函数定义:
let f x = x + 3;;
这是一个表达式:
let g = 4;;
可以g
认为是不带参数的常量函数吗?有什么区别吗?
这里我们有一个函数定义:
let f x = x + 3;;
这是一个表达式:
let g = 4;;
可以g
认为是不带参数的常量函数吗?有什么区别吗?
是的 - 从完全功能的角度来看(就像在 Haskell 中实践的那样),一切都是功能(真的是一切)。
而且由于纯函数式语言不允许任何形式的更改,因此该定义不存在任何矛盾。
有什么区别吗?
好吧,OCaml 不是纯功能的。这意味着允许函数执行与常量值的定义略有不同的副作用。
此代码(此处为 F# - 但在 Caml 中非常相似)将完全有效。
let name =
Console.Write("Enter your Name: ")
Console.ReadLine()
和...之间的不同
let f() = expr
和
let f = expr
在非纯语言中,“expr”的“效果”在前一种情况下在每个“调用站点”运行,在后一种情况下只在定义站点运行一次。这是两者之间为数不多的差异之一,但也许是最重要的。
从技术上讲,变量的定义是模式匹配:
let [x] = someList
let y::zs = someList
let (Some z) = someOption
let _ = someIgnoredExpr