首页 > 解决方案 > OCaml中的简单递归程序,迭代到10

问题描述

我正在尝试使用递归函数创建一个简单的 OCaml 程序,该函数检查输入 (x) 并递增 1 或递减 1,直到 x 的值为 10。

这是我目前拥有的 -

let rec until_ten x =
  match x with
  10 -> 1
  | x > 10 -> until_ten x - 1
  | x < 10 -> until_ten x + 1
  ;;

我哪里出错了?

标签: recursionocaml

解决方案


@TheoWinterhalter 给了你一个很好的答案,但我会稍微扩展。

OCamlmatch表达式采用一个表达式和一系列模式。反过来,模式用子结构部分的占位符表示表达式的可能值。

在您的match表达式中,您提供的是布尔测试而不是模式。这不是如何match工作的。没有匹配大于某个值的数字的模式。模式是关于结构和特定值的(本质上)。

您可以替换您的matchwithif ... then ... else if ...以获得有意义的功能。

正如@TheoWinterhalter 建议的那样,您可以使用match x with ... | x when x > 10 ...,但这只是编写if语句的一种复杂方式。


推荐阅读