我正在使用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
我不确定问题是什么...谢谢
答案 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)
transition
和nfa
是元组类型的同义词,而不是类型构造函数。假设您希望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个构造函数的代数数据类型是一种浪费。