OCaml:绑定表达式v.函数

Nic*_*ner 4 ocaml expression functional-programming function

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

let f x = x + 3;;
Run Code Online (Sandbox Code Playgroud)

这是一个表达式:

let g = 4;;
Run Code Online (Sandbox Code Playgroud)

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

Dar*_*rio 5

是的 - 从完全功能的角度来看(就像在Haskell中练习一样),一切都是功能(真的是一切).

由于纯功能语言不允许任何形式的改变,因此这个定义不会产生任何矛盾.

有什么区别吗?

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

这段代码(F#在这里 - 但在Caml中非常相似)将是完全有效的.

let name = 
    Console.Write("Enter your Name: ")
    Console.ReadLine()
Run Code Online (Sandbox Code Playgroud)

  • 最后一个例子的要点是变量定义中的副作用只能执行一次 (2认同)

Bri*_*ian 5

和...之间的不同

let f() = expr
Run Code Online (Sandbox Code Playgroud)

let f = expr
Run Code Online (Sandbox Code Playgroud)

在非纯语言是指"EXPR"的"效果"在前者的情况下每一个"呼叫网站"在后一种情况下的定义网站上运行,并且只有一次.这是两者之间的极少差异之一,但也许是最重要的.