ocaml中的语法错误

ocaml中的语法错误,ocaml,Ocaml,为什么下面的代码有语法错误?我不知道为什么 let rec revStr stringa k e = if k = e then "" else (string_of_char stringa.[e])^ (revStr stringa (e-1) k);; 字符串a,k,e是输入,它应该在输出中给出从整数e到整数k的子字符串。当我尝试它时,我得到了“unboundvalue:string\u of_char”,这是一个类型错误。类型错误出现在语法错误之后,因为类型是在解析

为什么下面的代码有语法错误?我不知道为什么

let rec revStr stringa k e = 
if    k = e then ""
else (string_of_char stringa.[e])^
      (revStr stringa (e-1) k);;

字符串
a
k
e
是输入,它应该在输出中给出从整数
e
到整数
k
子字符串。当我尝试它时,我得到了“unboundvalue:string\u of_char”,这是一个类型错误。类型错误出现在语法错误之后,因为类型是在解析之后发生的


我的猜测是,在这个函数之前有一个语法错误,比如忘记了分号或忘记了“in”。这些类型的错误通常会在很久以后检测到。

此代码中没有语法错误。当我尝试它时,我得到了“unboundvalue:string\u of_char”,这是一个类型错误。类型错误出现在语法错误之后,因为类型是在解析之后发生的


我的猜测是,在这个函数之前有一个语法错误,比如忘记了分号或忘记了“in”。这些类型的错误通常在很久以后才被检测到。

除了cygin指出的(参数似乎颠倒了,
revStr
使用较小的
e
值调用自身。但是你的描述听起来像
e
应该小于或等于
k
。那么您不想为
e
传递一个更大的值吗?否则我不明白你为什么会达到
k


作为旁注,我想知道为什么除了cygin指出的(参数似乎颠倒了,
revStr
)之外,子字符串函数还被命名为
revStr

revStr
调用自身时
e
。但是你的描述听起来像
e
应该小于或等于
k
。那么您不想为
e
传递一个更大的值吗?否则我不明白你为什么会达到
k


作为旁注,我想知道为什么子字符串函数被命名为
revStr

谢谢,但现在我发现了一个严重错误:“求值期间堆栈溢出(循环递归?)。你确定你的意思是
revStr stringa(e-1)k
而不是
revStr stringa k(e-1)
?谢谢,但现在我发现了一个严重错误:“求值期间堆栈溢出(循环递归?)。”您确定是指
revStr stringa(e-1)k
而不是
revStr stringa k(e-1)