«Синтаксическая ошибка» при написании функции OCaml? - PullRequest
0 голосов
/ 26 сентября 2019

Я пишу функцию в OCaml, чтобы поднять x до степени y.Мой код:

#let rec pow x y =
if y == 0 then 1 else
if (y mod 2 = 0) then pow x y/2 * pow x y/2 else
x * pow x y/2 * pow x y/2;;

Когда я пытаюсь выполнить его, я получаю сообщение об ошибке синтаксиса в первой строке, но оно не говорит мне, что это такое.

1 Ответ

1 голос
/ 26 сентября 2019

Когда вы написали код, вы набрали #?# - это просто символ, который OCaml REPL выводит для запроса ввода;это не часть кода.Вы не должны вводить его.

Вот некоторые другие ошибки, которые вы должны исправить:

  • == - это физическое равенство в OCaml.= - это структурное равенство.Хотя оба варианта работают одинаково для неупакованных типов (таких как int), лучше сделать y = 0.Обратите внимание, что вы используете =, рекомендуемое равенство, в выражении y mod 2 = 0.
  • Вам нужны круглые скобки вокруг y/2.pow x y/2 анализируется как (pow x y) / 2, но вы хотите pow x (y / 2).
...