Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 名称空间或模块';Lab2&x27;没有定义_F#_F# Interactive - Fatal编程技术网

F# 名称空间或模块';Lab2&x27;没有定义

F# 名称空间或模块';Lab2&x27;没有定义,f#,f#-interactive,F#,F# Interactive,我看了很多类似的问题,在谷歌搜索了几个小时,结果一无所获 我正试图从Program.fs文件访问我的tree.fs文件中的二叉树模块,在浏览器窗口中,我已将tree.fs文件移到Program.fs文件上方,这在几乎所有其他类似问题中都有建议,但这对我来说仍然不起作用 My Tree.fs文件 namespace Lab2 type Elem = System.IComparable type Tree = E | T of Tree * Elem * Tree module Binary

我看了很多类似的问题,在谷歌搜索了几个小时,结果一无所获

我正试图从Program.fs文件访问我的tree.fs文件中的二叉树模块,在浏览器窗口中,我已将tree.fs文件移到Program.fs文件上方,这在几乎所有其他类似问题中都有建议,但这对我来说仍然不起作用

My 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"
我尝试在两个文件中都不使用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"

如果编译并运行该项目,则不会出现错误。根据您的结果,我猜您手动将两个文件的内容复制到F#Interactive中,除了第一行带有名称空间和模块声明。在本例中,F#Interactive不知道
Lab2
名称空间,因此出现错误消息。一个快速解决办法是改变

open Lab2.BinaryTree 

它对
fsc
fsi
都有效,因为
Program
BinaryTree
模块共享父命名空间
Lab2

但是,您在运行项目和在F#Interactive中执行项目之间感到困惑。常见的解决方案是创建
树.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);;

如果编译并运行该项目,则不会出现错误。根据您的结果,我猜您手动将两个文件的内容复制到F#Interactive中,除了第一行带有名称空间和模块声明。在本例中,F#Interactive不知道
Lab2
名称空间,因此出现错误消息。一个快速解决办法是改变

open Lab2.BinaryTree 

它对
fsc
fsi
都有效,因为
Program
BinaryTree
模块共享父命名空间
Lab2

但是,您在运行项目和在F#Interactive中执行项目之间感到困惑。常见的解决方案是创建
树.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);;

谢谢,这就解决了问题,我对f#是新手,这真的很有帮助谢谢,这就解决了问题,我对f#是新手,这真的很有帮助