2011-01-22 34 views
5

Tôi mới đến OCaml và tôi không có đầu mối tại sao điều này đem lại cho tôi một lỗi cú pháp:OCaml lỗi cú pháp trong khai báo kiểu

type ('nonterminal, 'terminal) pe = 
| Empty 
| T of t 
| N of n 
| Seq of list 
| Choose of list 
| Star of e 
| Not of e;; 

type ('nonterminal, 'terminal) pe_tree = 
| Is_empty 
| Leaf of t 
| Node of (n,tree) 
| Sequence of list 
| Repeat of list 
| Is_not of e;; 

Tất cả nó nói là có lỗi cú pháp ở dòng 14 ký tự 0 -1 (là nơi có số | Sequence of list) và tôi không thể hiểu tại sao!

Trả lời

8
type ('nonterminal, 'terminal) pe_tree = 
    | Is_empty 
    | Leaf of t 
    | Node of (n * tree) 
    | Sequence of list 
    | Repeat of list 
    | Is_not of e;; 

Bạn sử dụng * để xác định loại sản phẩm, như trong 'a * 'b. Mặc dù có lẽ không quá quan trọng bây giờ, bạn nên biết rằng Node of 'a * 'bNode of ('a * 'b) là khác nhau. Bạn có thể coi chúng như là một loại biến thể với hai tham số, và một kiểu biến thể khác với một tham số (một tuple), tương ứng.

Có một vài thứ khác,

  • bạn cần xác định những gì SequenceRepeat là một danh sách.
  • 'nonterminal'terminal không được sử dụng; trừ khi chúng dành cho các loại ma, mà tôi nghi ngờ nó, chúng có lẽ nên được sử dụng trong một phần của chữ ký.
+0

Cảm ơn bạn! Tôi đang bối rối mặc dù, bởi vì tôi có một loại khai báo trước khi nó (mà tôi chỉ cần thêm vào câu hỏi ban đầu của tôi) và nó biên dịch tốt:/ – robocop

+0

có phải có nhiều hơn thì chỉ những định nghĩa kiểu; 't',' e' không được định nghĩa, cùng với những thứ khác tôi đã đề cập. Cả hai định nghĩa này đều không được biên dịch như bạn đã hiển thị chúng. – nlucaroni

+0

Ohh ok, tôi hiểu rồi. Hiển nhiên bây giờ haha ​​tôi không biết tại sao tôi lại gặp nhiều rắc rối như vậy - cảm ơn bạn! – robocop

Các vấn đề liên quan