次のスニペットコードでは、誰かがエラーを説明できますか?このコードでは、私は、ユーザからの入力をしながらBSTのINORDERトラバーサルを実装しようとしていコードスニペットのエラー
import System.IO
loop :: Int -> [Int] -> IO [Int]
loop 0 ls = return ls
loop n ls = do newNumber <- readLn
loop (n-1) (newNumber:ls)
data Tree a = EmptyTree | Node a (Tree a) (Tree a) deriving (Show,Read, Eq)
singleton :: a -> Tree a
singleton x = Node x EmptyTree EmptyTree
treeInsert :: (Ord a) => a -> Tree a -> Tree a
treeInsert x EmptyTree = singleton x
treeInsert x (Node a left right)
| x==a = Node x left right
| x<a = Node a (treeInsert x left) right
| x>a = Node a left (treeInsert x right)
inorder :: Tree a -> [a]
inorder EmptyTree = []
inorder (Node a left right) = inorder left ++ [a] ++ inorder right
main = do
putStrLn " Please enter the number"
number <- readLn :: IO Int
putStrLn $ "The num is:" ++ show number
xs <- loop number []
let numtree = foldr treeInsert EmptyTree xs
print numtree
ys <- inorder numtree
print ys
私が手にエラーがある:
Couldn't match expected type `IO t0' with actual type `[a0]'
In the return type of a call of `inorder'
In a stmt of a 'do' expression: ys <- inorder numtree
In the expression:
do { putStrLn " Please enter the number";
number <- readLn :: IO Int;
putStrLn $ "The num is:" ++ show number;
xs <- loop number [];
.... }
コンパイラでエラーが発生した場合は、エラーメッセージを質問に追加します。そうでない場合は、コードが何を期待しているのか、実際に何を期待するのかを説明してください。 – interjay
同じ質問を(ほとんど)繰り返し聞かないでください。あなたは何を期待していますか? SOは、人間によって駆動される分散コンパイラではありません。誰かこの質問を閉じることができますか? – Andre