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)
?