2012-04-20 78 views
0

我實現的NFA與Ocaml程序編寫和編譯器給我一個錯誤在該行OCaml的綁定變量

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

我不知道什麼問題是...謝謝

回答

3

transitionnfa是元組類型同義詞的錯別字,而不是類型構造。假設你想make_nfaint -> int list -> transition list -> nfa型的,那就乾脆

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

你沒有宣佈value nfa。您只宣佈了type nfa。

正如

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

編輯:道歉我是在JavaScript模式

2

您正在嘗試使用nfa作爲構造。但是您的類型nfa未定義構造函數。它只是一個元組類型的同義詞。所以這個類型的值看起來像(3, [4], [])

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個構造一個代數數據類型是一種浪費。