Я новичок в Ocaml и хочу помочь с рекурсивной функцией, определенной для рекурсивного типа данных. Я определил тип данных следующегоocaml взаимная ошибка рекурсии
type 'a slist = S of 'a sexp list
and
'a sexp = Symbol of 'a | L of 'a slist
Функции (Подст) Я пишу чеки для символа а в определенном SLIST и заменяет его на б. Для ex subst 1 10 S [1; 4; S [L [3; 1;]; 3];] возвращает S [10; 4; S [L [S [3; 10;]]; 3;] . Мой код выглядит следующим образом
let rec subst a b sl = match sl with
S s -> match s with
[] -> []
| p :: q -> match p with
Symbol sym -> if sym = a then S[b] :: (**subst** a b S[q]) else
S[p] :: (subst a b S[q])
L l -> (subst a b l) :: (subst a b S[q])
| L lis -> subst a b lis;;
я получаю ошибку:
Эта функция применяется слишком много аргументов; Возможно, вы забыли «;»
Пожалуйста, помогите
ваш код не компилируется, он содержит незаблокированный комментарий и синтаксическую ошибку на третьем 'match' – Thomash