我正在用 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
我不确定问题是什么...谢谢
我正在用 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
我不确定问题是什么...谢谢
你没有在任何地方声明value
nfa。您只声明了type
nfa。
如在
type nfa_type = int * int list * transitian list
let nfa = ( 1, [ 1; 2; 3 ], [x;y] )
编辑:为我在javascript模式下的错别字道歉
transition
并且nfa
是元组类型的同义词,而不是类型构造函数。假设您想make_nfa
成为 type int -> int list -> transition list -> nfa
,那将很简单
let make_nfa s fs ts = (s, fs, ts)
您正在尝试nfa
用作构造函数。但是您的类型nfa
没有定义构造函数。它只是元组类型的同义词。所以类型的值看起来像(3, [4], [])
.
正如其他人所提到的,nfa
是元组类型的同义词(如 typedef)int * int list * transition list
。
您似乎想像使用代数数据类型的构造函数一样使用它。如果你想这样做,你会做这样的事情:
type nfa = Nfa of int * int list * transition list
let make_nfa s fs ts = Nfa (s, fs, ts)
但是在这种情况下,具有 1 个构造函数的代数数据类型有点浪费。