在 Ocaml 中给出类型为 ('a -> 'a -> 'a) -> ('a * 'a -> 'a) 的表达式
Give an expression of type ('a -> 'a -> 'a) -> ('a * 'a -> 'a) in Ocaml
我正在学习 Ocaml,我在测试中解决了这个问题:
给出('a -> 'a -> 'a) -> ('a * 'a -> 'a)
类型的表达式
我无法得到解决方案,我能得到的最接近的是:
let expr f (x, y) = if f x y = x then x else y
val expr : ('a -> 'a -> 'a) -> 'a * 'a -> 'a = <fun>
如果你有想法...
在我看来,唯一缺少的部分是认识到这些类型是相同的:
a -> b -> c
a -> (b -> c)
在类型表达式中,->
运算符是右结合的。
换句话说,在我看来你的回答已经正确了。
我正在学习 Ocaml,我在测试中解决了这个问题:
给出('a -> 'a -> 'a) -> ('a * 'a -> 'a)
我无法得到解决方案,我能得到的最接近的是:
let expr f (x, y) = if f x y = x then x else y
val expr : ('a -> 'a -> 'a) -> 'a * 'a -> 'a = <fun>
如果你有想法...
在我看来,唯一缺少的部分是认识到这些类型是相同的:
a -> b -> c
a -> (b -> c)
在类型表达式中,->
运算符是右结合的。
换句话说,在我看来你的回答已经正确了。