Аргументы функции Haskell (не удалось найти ошибку типа) - PullRequest
0 голосов
/ 23 марта 2019

Я работаю с древовидной структурой, и у меня есть следующие строки кода, но я не понимаю, в чем причина проблемы.Моя функция reshapeTree принимает AST и Mapping в качестве аргументов и возвращает AST.Я действительно не знаю, что вызывает эту ошибку, и был бы признателен, если бы вы могли помочь. Спасибо

Я получаю следующую ошибку, и мой код ниже:

    test1.hs:55:35: error:
        * Couldn't match type <code>[Char]' with</code>AST'
          Expected type: [(String, AST, String)]
            Actual type: Mapping
        * In the second argument of <code>reshapeTree', namely</code>mapping'
          In the expression: reshapeTree tree mapping
          In an equation for `newTree': newTree = reshapeTree tree mapping
       |
    55 |  where newTree = reshapeTree tree mapping
       |                                   ^^^^^^^</p>

<code>type Mapping = [(String, String, String)]
data AST = EmptyAST | ASTNode String AST AST deriving (Show, Read)

reshapeTree (EmptyAST) (_) = EmptyAST
reshapeTree (ASTNode val l r) [] = (ASTNode val l r)
reshapeTree (ASTNode val l r) [(v1,v2,v3)]
 |val == v1 = (ASTNode v3 v2 EmptyAST)
 |otherwise = (ASTNode val (reshapeTree l [(v1,v2,v3)]) (reshapeTree r [(v1,v2,v3)]))
reshapeTree (ASTNode val l r) ((v1,v2,v3):xs)
 |val == v1 = (ASTNode v3 v2 EmptyAST) 
 |otherwise = reshapeTree (ASTNode val (reshapeTree l ((v1,v2,v3):xs)) (reshapeTree r ((v1,v2,v3):xs))) xs


evalTree (ASTNode val l r)
 |val == "plus" = show (read (evalTree l) + read (evalTree r) )
 |val == "times" = show (read (evalTree l) * read (evalTree r) )
 |val == "cat" =  (evalTree l) ++ (evalTree r) 
 |val == "negate" = show ((-1) * read (evalTree l))
 |val == "len" =  show (length(evalTree l))
 |val == "str" = evalTree l 
 |val == "num" = evalTree r
 |otherwise = val

evaluateAST (tree,mapping)
 |mapping == [] = (tree,evalTree tree)
 |otherwise = (tree, evalTree newTree)
 where newTree = reshapeTree tree mapping
</code>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...