OCaml编译类型错误,而不是正确的函数预期类型

时间:2019-06-16 05:19:04

标签: ocaml

这里是OCaml的新手。

基本上试图用两个函数来编译一段代码,但是我无法在第9行的第26-27列字符的类型错误中编译它,说:

“错误:此表达式的类型为t,但是期望该类型的表达式          字符串“”

基本上,第8行调用的parse函数期望使用类型字符串,但我不知道为什么。

sexp参数的类型:

buttonPressed = () => {
 let {clicks} = this.state   // define `clicks` here
 if(clicks > 5)
 {
    Alert.alert('Caution!','You have clicked 5 times already!');
    this.setState({clicks: 0});
    this.forceUpdate();
 }
 this.setState({clicks: clicks+1});
 //                     ^^^^^^^
}

代码:

type sexp = Atom of string | List of sexp list

1 个答案:

答案 0 :(得分:1)

您给出的代码将不会编译,因为第9行引用了parse,但直到稍后才定义。

要定义两个相互递归的函数,您需要使用let rec ... and ...

let rec f x = (* definition of f, which calls g *)
and g x = (* definition of g, which calls f *)

由于在第9行上看不到parse的更高定义,因此该名称必须引用某个先前的定义。也许在parse模块中定义了一个名为Sexp的函数。 (这是谨慎使用open的原因之一。)