0

我正在用 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

4 回答 4

3

你没有在任何地方声明valuenfa。您只声明了typenfa。

如在

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

编辑:为我在javascript模式下的错别字道歉

于 2012-04-20T06:39:08.703 回答
3

transition并且nfa是元组类型的同义词,而不是类型构造函数。假设您想make_nfa成为 type int -> int list -> transition list -> nfa,那将很简单

let make_nfa s fs ts = (s, fs, ts)
于 2012-04-20T06:42:32.783 回答
2

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

于 2012-04-20T06:43:43.930 回答
0

正如其他人所提到的,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 个构造函数的代数数据类型有点浪费。

于 2012-04-20T19:22:51.157 回答