我是Ocaml的新手,希望獲得關於在遞歸數據類型上定義的遞歸函數的幫助。我已經如下ocaml相互遞歸錯誤
type 'a slist = S of 'a sexp list
and
'a sexp = Symbol of 'a | L of 'a slist
我正在寫檢查在定義SLIST的符號的函數(SUBST)和用b替換它定義的數據類型。對於例子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;;
我收到錯誤:
此功能被應用到的參數太多;也許你忘了';'
請幫
你的代碼不能編譯,它包含一個未關閉的註釋和語法錯誤上的第三個'匹配' – Thomash