我正在学习Ocaml并且很难理解如何使用第一个函数作为另一个函数的参数。
例如,我创建了一个更大的函数
# let bigger (a,b) = match (a,b) with
(a,b) -> if a > b then true else false;;
val bigger : 'a * 'a -> bool = <fun>
# bigger (2,3);;
- : bool = false
# bigger (3,2);;
- : bool = true
现在我正在努力将此函数用作函数sortPair中的参数 - 它对两个元素进行排序: - 如果更大=真,那么(a,b) - 如果更大=假,则(b,a)
我确信这是一个非常简单的解决方案,但我真的想在继续前进之前先了解这个基本问题。
这就是我的尝试:
# let sortPair (a,b) = match (a,b) with
bigger (a,b) -> if true then (a,b) else (b,a);;
答案 0 :(得分:2)
您没有match
的基本语法。您应该仔细查看您的学习材料(请参阅here以获取初学者材料的指示)。
鉴于bigger (a, b)
返回布尔值,您可以使用if .. then .. else
形式:
if bigger(a,b) then ... else ...
答案 1 :(得分:1)
好的,所以我完全像@gasche所说的那样,毕竟这是一个非常简单的解决方案,我无缘无故地解决了这个问题:
# let sortPair (a,b) = if bigger (a,b) then (a,b) else (b,a);;
val sortPair : 'a * 'a -> 'a * 'a = <fun>
# sortPair (2,3);;
- : int * int = (3, 2)
我确实得到了一些我希望的语法。
('a*'a -> ('a*'a -> bool) -> 'a*'a)