【问题标题】:Ocaml - using one function in anotherOcaml - 在另一个函数中使用一个函数
【发布时间】:2013-06-18 16:51:02
【问题描述】:

我正在学习 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) - 如果更大 = false 那么 (b,a)

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

这是我尝试过的:

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

【问题讨论】:

  • # let bigger (a,b) = if a&gt;b then true else false;; 也可以。

标签: function ocaml


【解决方案1】:

你没有match 的基本语法是对的。您应该仔细查看您的学习材料(请参阅here 以获得指向初学者材料的指针)。

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

if bigger(a,b) then ... else ...

【讨论】:

  • 我试过 if .. then .. else 但总是得到语法错误。我会试着找出一些东西,并在我得到答案时得到答案。感谢您提供学习资料。
【解决方案2】:

好吧,我完全按照@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)

【讨论】:

  • 你希望函数是什么类型的?
  • ('a*'a -&gt; ('a*'a -&gt; bool) -&gt; 'a*'a)
  • 如果你想要那个类型,你会想把一个函数和这个对一起传递给sortPair。喜欢let sortPair (a,b) f = if f (a,b) then (a,b) else (b,a),并称它为sortPair (2,3) bigger
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多