私は非常に直感的だと思うHaskellでメソッドを作成しようとしています。私は任意の深いリストのリストを*持っています。再帰の深さにかかわらず、リスト内の特定のアトムを取り出したいと思います。 Haskellで再帰的リストを実装する方法とそれを操作する方法
type List = [Array]
data Array = Int | List
drill :: Array -> [Int] -> Array
drill xs (index:[]) = xs !! index
drill xs (index:is) = drill (xs !! index) is
は、しかし、私はGHCiの中にロードするときに、次の受信:
drill.hs:5:23:
Couldn't match expected type `[Array]' with actual type `Array'
In the first argument of `(!!)', namely `xs'
In the expression: xs !! index
In an equation for `drill': drill xs (index : []) = xs !! index
私が書いたことは私には直感的なようだが、はっきりとHaskellはタイプの問題を持っているここに私の努力です。そして、ハスケル初心者のように、私は型エラーを解釈する上で最善ではありません。関数の戻り値の型は、アトム:Int
、またはリスト:[Int]
のいずれかになります。誰かがこれを解読し、解決策を提案するのを助けることができますか?あなたは
data Array = Int | List
を言うとき
これはリストではない、それは木です! –