Ich habe alle Probleme gelöst, die ich mit Funktionen hatte, aber eine bleibt übrig.Haskell foldr algrebraic datatypes
Die foldr Funktion arbeitet vom letzten Elemente zum ersten und ich brauche die Daten in der anderen Reihenfolge
module QueueFunctor where
import Test.HUnit (runTestTT,Test(TestLabel,TestList,TestCase),(~?=))
import Data.Char (toUpper)
import Prelude hiding (foldr)
import Data.Foldable (Foldable, foldr)
data DQueue a = Empty | Enqueue a (DQueue a)
deriving (Eq, Show, Read)
instance Foldable DQueue
where
foldr _ result Empty = result
foldr f result (Enqueue x xs) = foldr f (f x result) xs
-- | Tests a few examples.
main :: IO()
main = do
testresults <- runTestTT tests
print testresults
sample1 :: DQueue Int
sample1 = Enqueue 1 $ Enqueue 2 $ Enqueue 3 $ Enqueue 4 Empty
sample2 :: DQueue String
sample2 = Enqueue "a" $ Enqueue "b" $ Enqueue "c" $ Enqueue "d" Empty
tests :: Test
tests = TestLabel "DQueueTest" (TestList [
foldr (++) "" sample2 ~?= "abcd"
])
zu bekommen Wenn ich das Programm zu kompilieren, ich einen Fehler in Bezug auf Tests erhalten:
### Failure in: DQueueTest:1
QueueFunctors.hs:56
expected: "abcd"
but got: "dcba"
Vielen Dank im Voraus.
Warum nicht 'foldl' verwenden? – karakfa
Es gab eine strenge Regel in der Beschreibung der Aufgabe, um foldr zu verwenden. –
Ihre 'foldr' Definition sieht aus, als wäre sie' foldl'. Das würde die umgekehrten Ergebnisse erklären. – melpomene