OCaml中函数返回的解密
我试图解密下面的calc函数的返回,但我很困惑。 我有一个f函数,它接受3个整数并返回一个整数。 我认为计算函数应该返回OCaml中函数返回的解密,ocaml,Ocaml,我试图解密下面的calc函数的返回,但我很困惑。 我有一个f函数,它接受3个整数并返回一个整数。 我认为计算函数应该返回valcalc:int->int=,因为f必须取3个int,我给它x和y,所以现在它需要再返回一个int,最后的结果。为什么这个逻辑不正确? 我无法理解实际的输出,特别是当我强制f中的参数为整数时的多病态值 # let f (x : int) (y : int) (z : int) = x + y + z;; val f : int -> int -> int -&
valcalc:int->int=
,因为f必须取3个int,我给它x和y,所以现在它需要再返回一个int,最后的结果。为什么这个逻辑不正确?
我无法理解实际的输出,特别是当我强制f中的参数为整数时的多病态值
# let f (x : int) (y : int) (z : int) = x + y + z;;
val f : int -> int -> int -> int = <fun>
# let calc x y f = f x y;;
val calc : 'a -> 'b -> ('a -> 'b -> 'c) -> 'c = <fun>
设f(x:int)(y:int)(z:int)=x+y+z;;
val f:int->int->int->int=
#设calc x y f=f x y;;
val calc:'a->'b->('a->'b->'c)->'c=
在表达式中,让计算x y f=f x y
,f
是一个局部绑定变量(calc
绑定x
,y
,然后绑定f
),而不是您以前定义的函数
如果你写了让calc x y=f x y代码>则您将得到预期的结果。在表达式中,让calc x y f=f x y
,f
是一个局部绑定变量(calc
绑定x
,y
,然后绑定f
),而不是您以前定义的函数
如果你写了让calc x y=f x y代码>则会得到预期结果。函数calc
不包含对函数f
的引用。有一个名为f
的参数,它可以被命名为g
,而不做任何更改:让calc x y g=g x y
。如果要使用上面定义的函数f
,而不是任何正确类型的函数,则不能将f
作为参数传递,应按如下方式重写calc
:
let f x y z = x + y + z
let calc x y = f x y
然后,calc
将具有类型int->int->(int->int)
,该类型更常见地写为int->int->int->int
函数calc
不包含对函数f
的引用。有一个名为f
的参数,它可以被命名为g
,而不做任何更改:让calc x y g=g x y
。如果要使用上面定义的函数f
,而不是任何正确类型的函数,则不能将f
作为参数传递,应按如下方式重写calc
:
let f x y z = x + y + z
let calc x y = f x y
然后,calc
将有类型int->int->(int->int)
,现在更常见的是写为int->int->int->int,谢谢。让我看看我是否理解了calc的逻辑。它需要一些a,一些b和一些函数,这些函数需要前面的a和b来输出一些东西,'c'反过来就是计算的返回值。这是对的吗?它确实是这样做的。:)现在说得通了,谢谢。让我看看我是否理解了calc的逻辑。它需要一些a,一些b和一些函数,这些函数需要前面的a和b来输出一些东西,'c'反过来就是计算的返回值。这是对的吗?它确实是这样做的。:)那么这个等价的代码呢,让f(x:int)(y:int)(z:int)=x+y+z,让calc x y g=gxy
?calc定义中的参数f(这里是g)创建了一个新绑定,该绑定将隐藏前面声明的f。它们没有共同点。那么这个等价的代码是什么呢?让f(x:int)(y:int)(z:int)=x+y+z让calc x y g=gx y
?calc定义中的参数f(这里是g)创建了一个新绑定,该绑定将隐藏前面声明的f。他们没有共同之处。