1

这段代码在几分钟前还在工作,在我重新启动我的 ghci 后,它就停止工作了。现在我在where,snstsize. (不知道我改变了什么导致每个单独的错误)

有人可以指出我的语法有什么问题吗?

instance Array Tree where
    new n x  
        | n <= 0    = Leaf
        | odd n     = Node n nst x nst
        | even n    = Node n (Node (n `div` 2) snst x snst) x snst
        where nst = (new (n `div` 2) x)
              snst = (new (n `div` 2 - 1) x)

    size Leaf            = 0
    size (Node s _ _ _)  = s
4

1 回答 1

3

在这些情况下,请确保没有隐藏选项卡。

我检查了您的缩进方式where是否有效。因此,除非声明之前有错误,否则instance我看不到任何语法错误。

此外,消除错误来源的一个想法是移出new.

myNew :: ...
myNew n x  
        | n <= 0    = Leaf
        | odd n     = Node n nst x nst
        | even n    = Node n (Node (n `div` 2) snst x snst) x snst
        where nst = (new (n `div` 2) x)
              snst = (new (n `div` 2 - 1) x)

instance Array Tree where
    new = myNew

    size Leaf            = 0
    size (Node s _ _ _)  = s

试试这个,看看是否编译

于 2013-03-27T02:59:26.843 回答