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
被认为是不带参数的常量函数吗?有什么区别吗?
是的 - 从完全功能的角度来看(就像在Haskell中练习一样),一切都是功能(真的是一切).
由于纯功能语言不允许任何形式的改变,因此这个定义不会产生任何矛盾.
有什么区别吗?
嗯,OCaml不是纯粹的功能.这意味着允许函数执行与常量值的定义略有不同的副作用.
这段代码(F#在这里 - 但在Caml中非常相似)将是完全有效的.
let name =
Console.Write("Enter your Name: ")
Console.ReadLine()
Run Code Online (Sandbox Code Playgroud)
和...之间的不同
let f() = expr
Run Code Online (Sandbox Code Playgroud)
和
let f = expr
Run Code Online (Sandbox Code Playgroud)
在非纯语言是指"EXPR"的"效果"在前者的情况下每一个"呼叫网站"在后一种情况下的定义网站上运行,并且只有一次.这是两者之间的极少差异之一,但也许是最重要的.