私は多くの同様の質問を見て、数時間グーグルを検索しました、そして、私はどこにも行きません。
Program.fsファイルからTree.fsファイルにあるバイナリツリーモジュールにアクセスしようとしています。エクスプローラーウィンドウで、他のほとんどすべてで提案されているように、Tree.fsファイルをProgram.fsファイルの上に移動しました。同様の質問ですが、これは私にとってはうまくいかないまでです。
MyTree.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"