recursion - 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
;;
我哪里出错了?
解决方案
@TheoWinterhalter 给了你一个很好的答案,但我会稍微扩展。
OCamlmatch
表达式采用一个表达式和一系列模式。反过来,模式用子结构部分的占位符表示表达式的可能值。
在您的match
表达式中,您提供的是布尔测试而不是模式。这不是如何match
工作的。没有匹配大于某个值的数字的模式。模式是关于结构和特定值的(本质上)。
您可以替换您的match
withif ... then ... else if ...
以获得有意义的功能。
正如@TheoWinterhalter 建议的那样,您可以使用match x with ... | x when x > 10 ...
,但这只是编写if
语句的一种复杂方式。