我一直在尝试运行此功能:
let insert_char s c =
let z = String.create(String.length(s)*2 -1) in
for i = 0 to String.length(s) - 1 do
z.[2*i] <- s.[i];
z.[2*i+1] <- c;
done;
z;;
print_string(insert_char("hello", 'x'));;
然而,解释器在最后一行“type is string * char”返回一个类型错误,并且它期望它是字符串。我以为我的函数insert_char创建了一个字符串。我真的不明白,谢谢。
答案 0 :(得分:2)
您将函数定义为curried函数,但是您使用一对值调用它。你应该这样称呼它:
insert_char "hello" 'x'
OCaml不需要括号来进行函数调用。当两个值彼此相邻放置且两者之间没有任何内容时,这是一个函数调用。
答案 1 :(得分:0)
OCaml中函数应用程序的语法是f arg1 arg2
,而不是f(arg1, arg2)
。所以它会是print_string (insert_char "hello" 'x')
。
(一旦你修好了,你就会发现你的代码有其他问题,但这与你的问题无关。)