2017-05-09 5 views
-1

を使用してHaskellでは、バイナリツリー上で次トラバースを行います機能を実装する方法に慣れて、私の試みは次のとおりです。は、私はHaskellでは倍の修正版を使用してインオーダートラバーサル機能を実装しようとしている倍

何か助けていただければ幸いです。

エラーメッセージ:

Couldn't match expected type ‘[a]’ with actual type ‘[a] -> [a]’ 
• In the first argument of ‘foldT’, namely 
    ‘(\ x l r -> l ++ x ++ r)’ 
    In the expression: foldT (\ x l r -> l ++ x ++ r) [] 
    In an equation for ‘inorderT’: 
     inorderT = foldT (\ x l r -> l ++ x ++ r) [] 
• Relevant bindings include 
    inorderT :: Tree a -> [a] 
+0

あなたはどのようなエラーメッセージを取得していますか?そして、エラーメッセージがどういう意味だと思いますか? – luqui

+0

エラーメッセージを含めるように質問を更新しました。タイプに問題がありますが、解決方法に不明です – newbie

+0

エラーメッセージの意味を推測しましょう。それはあなたのコードの特定のセクションを指しています - 何が間違っている可能性がありますか?あなたの推測を投稿してください。 (このような努力を示すことは、あなたがそれを理解して助けてくれる人々を支持するのに役立ちます) – luqui

答えて

0

私はfoldT定義からツリーのデータ型を再構築してきました。一般的に使用されているNode a (Tree a) (Tree a)フォームにないことを確認してください。(\x l r -> l ++ x ++ r)が間違っています。

はあなたのコードを確認し、後でこれは何が必要であるかどうかを確認:

data Tree a = Tip a | Node (Tree a) (Tree a) 

foldT :: (u -> u -> u) -> (a -> u) -> Tree a -> u 
foldT f g (Tip a) = g a 
foldT f g (Node l r) = f (foldT f g l) (foldT f g r) 

inorderT :: Tree a -> [a] 
inorderT = foldT (\l r -> l ++ r) (\x -> [x]) 
関連する問題