Что не так с этой императивной версией факториальной функции в ocaml? - PullRequest
3 голосов
/ 24 марта 2012
let impfac i = 
  let l = ref i in
  let result = ref 1 in
  let k = ref 2 in
  while !k < !l do
    result := !result * !k
      k:=!k+1
  done;
  !result

Сообщение об ошибке:

let impfac i = 
  let l = ref i in
  let result = ref 1 in
  let k = ref 2 in
  while !k < !l do
    result := !result * !k
      k:=!k+1
  done;
  !result;;
                Characters 121-123:
      result := !result * !k
                          ^^
Error: This expression is not a function; it cannot be applied
#

1 Ответ

7 голосов
/ 24 марта 2012
result := !result * !k
  k:=!k+1

Вам не хватает точки с запятой в конце первой строки.Из-за этого он читается как:

result := !result * (!k k:=!k+1)

т.е. он думает, что вы пытаетесь вызвать !k с k:=!k+1 в качестве аргумента.

По этой же причине ваш редактор имеет отступлиния с k := !k+1 дальше вправо, чем линия над ней.Это должно было стать первым признаком того, что с синтаксисом что-то не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...