Functional programming OCaml输入类型
我正在学习OCaml,到目前为止,我很难理解类型的概念 例如,如果我们有以下代码:Functional programming OCaml输入类型,functional-programming,ocaml,Functional Programming,Ocaml,我正在学习OCaml,到目前为止,我很难理解类型的概念 例如,如果我们有以下代码: # let func x = x;; val func : 'a -> 'a = <fun> ('a->'b)是什么意思? 'a与f相关,而'b与x相关吗 另一个让我更加困惑的函数组合是: # let composition2 f x = f(f(x));; val composition2 : ('a -> 'a) -> 'a -> 'a = <fun> 让合
# let func x = x;;
val func : 'a -> 'a = <fun>
('a->'b)
是什么意思?
'a
与f
相关,而'b
与x
相关吗
另一个让我更加困惑的函数组合是:
# let composition2 f x = f(f(x));;
val composition2 : ('a -> 'a) -> 'a -> 'a = <fun>
让合成2 f x=f(f(x));;
val组合2:('a->'a)->'a->'a=
我真的不明白为什么在这种情况下我们没有'b
提前谢谢你
'a->'b
是一种函数类型,它接受一个'a
类型的参数,并返回一个'b
类型的值
val组合:('a->'b)->'a->'b
表示composition
是两个参数的函数:
('a->'b)
,因此函数如上所述'a
'b
的返回类型相同的内容。实际上,它接受一个函数及其参数,并将该函数应用于该参数
在第二种情况下,您可以从内部调用向后工作。让我们看看
f(f(x))
x
是任何类型的'b
。我们还不知道这是什么类型的f(x)
,f
必须是'b->'c
类型的函数。它是'b
,因为我们知道它需要x
作为输入,x
是'b
类型composition2
的类型是('b->'c)->'b
f(f(x))
,所以f
参数的类型必须与其返回值的类型相同。所以,'b=='c
。将该类型称为'a
x
是'b
类型,与'a
相同,x
必须是'a
类型f
属于'b->'c
类型,其中'b=='a
和'c=='a
,f
必须属于'a->'a
类型composition2
的类型是('a->'a)->'a
'a->'b
是一种函数类型,它接受一个'a
类型的参数,并返回一个'b
类型的值
val组合:('a->'b)->'a->'b
表示composition
是两个参数的函数:
('a->'b)
,因此函数如上所述'a
'b
的返回类型相同的内容。实际上,它接受一个函数及其参数,并将该函数应用于该参数
在第二种情况下,您可以从内部调用向后工作。让我们看看
f(f(x))
x
是任何类型的'b
。我们还不知道这是什么类型的f(x)
,f
必须是'b->'c
类型的函数。它是'b
,因为我们知道它需要x
作为输入,x
是'b
类型composition2
的类型是('b->'c)->'b
f(f(x))
,所以f
参数的类型必须与其返回值的类型相同。所以,'b=='c
。将该类型称为'a
x
是'b
类型,与'a
相同,x
必须是'a
类型f
属于'b->'c
类型,其中'b=='a
和'c=='a
,f
必须属于'a->'a
类型composition2
的类型是('a->'a)->'a
现在说得很有道理。谢谢你的澄清!现在说得很有道理。谢谢你的澄清!这不是合成,这是应用。这不是合成,这是应用。
# let composition2 f x = f(f(x));;
val composition2 : ('a -> 'a) -> 'a -> 'a = <fun>