Ocaml - 在另一个中使用一个功能

时间:2013-06-18 08:18:05

标签: function ocaml

我正在学习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);;

2 个答案:

答案 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)