首页 > 解决方案 > 我是否正确理解了该功能及其用途?另外,语法错误?

问题描述

我无法理解为什么我不断收到此函数的语法错误。它返回一个 int,使得 n_times (f,n,v) 将 f 应用于 vn 次。例如,n_times((fun x-> x+1), 50, 0) = 50。如果 n<=0 返回 v。

let rec n_times (f, n, v) =
  (* YOUR CODE HERE *)
   raise (Failure "Not implemented")
assert (n_times((fun x-> x+1), 50, 0) = 50)

这是我编码的内容:

let rec n_times (f, n, v) =
  (* YOUR CODE HERE *)
  |n<=0 -> f v
  |n>0 -> f v * n_times(f, n, v)

  let f() = (Failure "Not implemented2")

let f() = assert (n_times((fun x-> x+1), 50, 0) = 50)

我相信这个函数 v 被乘以 n 倍。我理解对了吗?另外我不明白为什么我的代码的第一行给我一个语法错误?

标签: syntax-errorocaml

解决方案


你似乎在写一个match表达式,但你只有最后一部分(有不同的选择),而不是第一部分(它说match ... with)。因此,|令牌在您的代码中出现时是不允许的。

作为第二条评论,该match语句采用模式,而n <= 0不是模式。这是一个布尔表达式。

因此,您更有可能只想使用if语句。


推荐阅读