2012-12-17 2 views
1

나는 비슷한 질문을 많이했고 Google을 몇 시간 동안 검색했지만 아무데도 갈 수 없습니다.네임 스페이스 또는 모듈 'Lab2'가 정의되어 있지 않습니다.

내 Program.fs 파일 및 탐색기 창에서 Tree.fs 파일에있는 내 이진 트리 모듈에 액세스하려고하는데 Tree.fs 파일을 Program.fs 파일 위에있는 것으로 옮겼습니다. 다른 비슷한 질문들도 있지만 이것은 나를 위해 일하지 않을 때까지입니다.

내 Tree.fs

namespace Lab2 

type Elem = System.IComparable 

type Tree = E | T of Tree * Elem * Tree 

module BinaryTree = 
    let emptyTree = E 

    let rec add = function 
        | x, E -> T(E, x, E) 
        | x, T(a, y, b) when x < y -> T(add(x, a), y, b) 
        | x, T(a, y, b) when y < x -> T(a, y, add(x, b)) 
        | _, s -> s 

    let rec addList = function 
         | [], T(a, y, b) -> T(a, y, b) 
         | x::xs, T(a, y, b) when x < y -> addList(xs, T(add(x, a), y, b)) 
         | x::xs, T(a, y, b) when y < x -> addList(xs, T(a, y, add(x, b))) 
         | _, s -> s 


    let rec preorder = function 
         | T(a, y, b) when a <> E -> y::preorder a 
         | T(a, y, b) when b <> E -> y::preorder b 
         | _ -> [] 

    let rec inorder = function 
         | T(a, y, b) when a <> E -> y::inorder a 
         | T(a, y, b) when b <> E -> y::inorder b 
         | _ -> [] 

    let rec postorder = function 
         | T(a, y, b) when b <> E -> y::preorder b 
         | T(a, y, b) when a <> E -> y::preorder a 
         | _ -> [] 

    let rec treeToString = function 
          | T(a, y, b) when a <> E -> "(node " + y.ToString() + treeToString a 
          | T(a, y, b) when b <> E -> y.ToString() + treeToString b + ")" 
          | _ -> "Empty" 

내 Program.fs 내 파일 모두에서 LAB2 네임 스페이스를 사용하지 않는 시도하고 대신 모듈로 두 파일을 사용하여 한

module Lab2.Program 

open Lab2.BinaryTree 

let tree = addList([5; 2; 1; 6; 7], emptyTree);; 

let inorder_tree = inorder(tree);; 

let char_tree = addList(['e';'b';'a';'f';'g'], emptyTree);; 

let inorder_char_tree = inorder(char_tree);; 

let print = treeToString(char_tree);; 

파일 파일 만 이것은 여전히 ​​저에게 동일한 오류를줍니다.

나는, 오류가 나는 디버깅하는 것이이

Program.fs(66,6): error FS0039: The namespace or module 'Lab2' is not defined 
> val inorder_tree : Elem list = [] 
> val char_tree : Tree = E 
> val inorder_char_tree : Elem list = [] 
> val print : string = "Empty" 
과 같은 경우에만 오류가

let tree = addList([5; 2; 1; 6; 7], emptyTree);; 

그래서 다음 줄에서 발생

디버깅하지 전까지 내 코드에는 파란색 또는 빨간색 선이 없다

답변

3

프로젝트를 컴파일하고 실행하면 오류가 발생하지 않습니다. 결과를 바탕으로 네임 스페이스 및 모듈 선언이있는 첫 번째 줄을 제외하고 두 파일의 내용을 F # Interactive에 수동으로 복사 한 것 같습니다. 이 경우 Lab2 네임 스페이스는 F # Interactive에서 알 수 없으므로 오류 메시지가 표시됩니다. 빠른 수정 ProgramBinaryTree 모듈은 부모 네임 스페이스 Lab2을 공유하기 때문에 그것은 fscfsi 모두에서 작동

open Lab2.BinaryTree 

open BinaryTree 

에 변경하는 것입니다.

그러나 프로젝트를 실행하고 F # Interactive에서 실행하는 것은 혼란 스럽습니다. 일반적인 해결책은 그것에서 모듈을 해당하는 Tree.fsx 파일 및 부하 생성하는 것입니다 :

#load "Tree.fs"  
open Lab2.BinaryTree 

let tree = addList([5; 2; 1; 6; 7], emptyTree);; 
let inorderTree = inorder(tree);; 
let charTree = addList(['e';'b';'a';'f';'g'], emptyTree);; 
let inorderCharTree = inorder(charTree);; 
let print = treeToString(charTree);; 
+0

감사합니다, 그것을 해결하는, F 번호에 새로운 메신저 그게 정말 도움이되었다 –

관련 문제