我是 Ocaml 的新手,需要有关在递归数据类型上定义的递归函数的帮助。我已经定义了一个数据类型如下
type 'a slist = S of 'a sexp list
and
'a sexp = Symbol of 'a | L of 'a slist
我正在编写的函数(subst)检查定义的 slist 中的符号 a 并将其替换为 b。对于 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;;
我收到错误消息:
此函数应用于太多参数;也许你忘记了一个';'
请帮忙