1

このコードは数分前に機能していましたが、ghciを再起動した後、機能しなくなりました。現在、、またはのいずれかでランダムエラーが発生してwheresnstますsize。(それぞれの個別のエラーを引き起こすために何を変更したかわからない)

誰かが私の構文の何が問題になっているのか指摘できますか?

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宣言の前にエラーがない限り、構文エラーは表示されません。

また、エラーの原因を排除するための1つのアイデアは、の定義を削除することです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 に答える