Я правильно понимаю функцию и ее назначение? Кроме того, ошибка синтаксиса? - PullRequest
0 голосов
/ 17 февраля 2020

У меня проблемы с пониманием, почему я получаю синтаксическую ошибку для этой функции. Он возвращает int таким образом, что n_times (f, n, v) применяет f к vn раз. Например, n_times ((fun x-> x + 1), 50, 0) = 50. Если n <= 0, верните v. </p>

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 раз. Я правильно понимаю? Также я не понимаю, почему первая строка моего кода дает мне синтаксическую ошибку?

1 Ответ

0 голосов
/ 17 февраля 2020

Вы, кажется, пишете выражение match, но у вас есть только последняя часть (с различными альтернативами), а не первая часть (которая говорит match ... with). Поэтому токен | недопустим в том месте, где он появляется в вашем коде.

В качестве второго комментария оператор match принимает шаблоны, а n <= 0 не является шаблоном. Это логическое выражение.

Так что, скорее всего, вы просто хотите использовать оператор if.

...