OCaml未绑定变量

时间:2012-04-20 06:35:44

标签: module ocaml type-inference

我正在使用Ocaml实现NFA,编译器在此行给出了错误

module Nfa : NFA =
struct

type transition = int * char option * int
type nfa = int * int list * transition list

let make_nfa s fs ts = nfa (s, fs, ts);;

错误发生在编译器说Error: Unbound value nfa

的最后一行

我不确定问题是什么...谢谢

4 个答案:

答案 0 :(得分:3)

你无处宣布value nfa。您只声明了type nfa。

type nfa_type = int * int list * transitian list
let nfa = ( 1, [ 1; 2; 3 ], [x;y] )

编辑:为我在javascript模式下的拼写错误道歉

答案 1 :(得分:3)

transitionnfa是元组类型的同义词,而不是类型构造函数。假设您希望make_nfa属于int -> int list -> transition list -> nfa类型,则只需

let make_nfa s fs ts = (s, fs, ts)

答案 2 :(得分:2)

您正在尝试使用nfa作为构造函数。但是您的类型nfa没有定义构造函数。它只是元组类型的同义词。因此,该类型的值看起来像(3, [4], [])

答案 3 :(得分:0)

正如其他人所提到的,nfa是元组类型int * int list * transition list的同义词(如typedef)。

您似乎想要像代数数据类型的构造函数一样使用它。如果你想这样做,你会做这样的事情:

type nfa = Nfa of int * int list * transition list

let make_nfa s fs ts = Nfa (s, fs, ts)

但是在这种情况下使用1个构造函数的代数数据类型是一种浪费。