С этим кодом довольно много проблем.
На внешнем уровне модуля (например, исходный файл или вход REPL) вы можете использовать let var = val
для определения глобальной переменной.В вашем коде вы используете эту конструкцию, например, для определения str
.
Однако, когда let
появляется где-либо еще (внутри объявления или выражения), он используется для определения local переменная, за которой должно следовать in
и выражение, в котором используется локальное определение.Поскольку у вас нет in
в ваших определениях first_approach
и second_approach
, ваш код синтаксически недействителен.
Поскольку определения внутри first_approach
и second_approach
являются локальными, существуетне будет никакого эффекта после того, как вы позвоните им.Определения для char1
и т. Д., Даже если они синтаксически исправлены, не будут глобальными.(Как говорит @melpomene, код ничего не делает.)
Если у вас есть несколько выражений, разделенных ;
, вы можете использовать begin
/ end
, чтобы сгруппировать их в одно выражение после then
или else
.
let f x =
if x > 5 then
begin
Printf.printf "x is quite large\n";
Printf.printf "adios\n"
end
Если строка s
имеет длину 3, символ String.get s 3
.
# let s = "abc";;
val s : string = "abc"
# String.get s 3;;
Exception: Invalid_argument "index out of bounds".
отсутствует.