我查看了许多类似的问题,并在谷歌上搜索了几个小时,但我一无所获。
我正在尝试从我的 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 文件
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);;
我试过不在我的两个文件中使用 Lab2 命名空间,而是只使用两个文件作为模块,但这仍然给我同样的错误。
我的代码中没有蓝线或红线,在调试之前没有错误
该错误仅发生在以下行
let tree = addList([5; 2; 1; 6; 7], emptyTree);;
所以在调试时它看起来像这样
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"