2013-11-15 25 views
9

Gần đây tôi đã bắt đầu học F # và hôm nay tôi gặp lỗi mà tôi không thể thoát khỏi. Tôi có mã sau:F # Cấu trúc có cấu trúc chưa đầy đủ

open System 

[<EntryPoint>] 
let main argv = 

    type BinaryTree = 
     | Node of int * BinaryTree * BinaryTree 
     | Empty 

    let rec printInOrder tree = 
     match tree with 
     | Node (data, left, right) 
      -> printInOrder left 
       printfn "Node %d" data 
       printInOrder right 
     | Empty 
      ->() 

    let binTree = 
     Node(2, 
      Node(1, Empty, Empty), 
      Node(4, 
       Node(3, Empty, Empty), 
       Node(5, Empty, Empty) 
      ) 
    ) 

printInOrder binTree 
0 

Với mã này tôi nhận được lỗi sau:

Incomplete structured construct at or before this point in binding

Đáng tiếc là tôi không có ý tưởng làm thế nào để sửa chữa nó. Đây là ví dụ mã từ cuốn sách Lập trình F # 3.0.

Tôi rất cảm kích mọi câu trả lời có thể giúp tôi hiểu cách tránh những sai lầm này trong tương lai.

Trả lời

11

Bạn cần xác định các loại và chức năng trong ngữ cảnh thích hợp (bên ngoài chức năng).

open System 

type BinaryTree = 
    | Node of int * BinaryTree * BinaryTree 
    | Empty 

let rec printInOrder tree = 
    match tree with 
    | Node (data, left, right) 
     -> printInOrder left 
      printfn "Node %d" data 
      printInOrder right 
    | Empty 
     ->() 

let binTree = 
    Node(2, 
     Node(1, Empty, Empty), 
      Node(4, 
       Node(3, Empty, Empty), 
       Node(5, Empty, Empty) 
      ) 
    ) 

[<EntryPoint>] 
let main argv = 
    printInOrder binTree 
    0 
+0

Điều đó thật nhanh. Cảm ơn nhiều – Divh