1

我正在学习 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 中的参数 - 它对两个元素进行排序: - 如果更大 = true 则(a,b) - 如果更大 = 假则(b,a)

我确信这是一个非常简单的解决方案,但我真的很想在继续之前了解这个基本问题。

这是我尝试过的:

# let sortPair (a,b) = match (a,b) with
  bigger (a,b) -> if true then (a,b) else (b,a);;
4

2 回答 2

2

您没有match正确的基本语法。您应该仔细查看您的学习材料(有关初学者材料的提示,请参见此处)。

鉴于bigger (a, b)返回一个布尔值,您可以使用以下if .. then .. else形式:

if bigger(a,b) then ... else ...
于 2013-06-18T08:29:57.063 回答
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)
于 2013-06-18T08:51:02.297 回答