Ich fange gerade an, funktionelle Programmierung zu lernen, Meine Wahl ist haskell. Es ist schon ein paar Tage ok bis bizzare etwas in der Konsole passierenHaskell spuckt falsche Zahlen zufällig aus
Zuerst dachte ich, das Tutorial (http://learnyouahaskell.com/starting-out) ist falsch
Prelude> [ (a,b,c) | c <- [1..10], b <- [1..c], a <- [1..b], a^2 + b^2 == c^2]
[(1,1,1)]
Es (3,4,5)
und (4,6,8)
sein sollte. Ich versuchte 3^2+5^2
, es spuckt diese Masse von Zahlen aus (etwas wie 60 Reihen von Zahlen, ungefähr 3000 Ziffern); 4^2+3^2
scheint die gleichen Zahlen zu produzieren.
keine Zahlen addieren Der Versuch wird das Ergebnis 100
sein
Prelude> 100 + 200
100
Prelude> 300 + 500
100
ich das Fenster zu schließen und wieder öffnen und das Problem ist gelöst.
Tritt diese Fehlkalkulation häufig in Haskell auf? oder vielleicht ist meine Version von Haskell beim Herunterladen beschädigt? oder Ist das ein seltener Fehler?
Sind Sie sicher, dass Sie nicht wie etwas zu tun haben 'lassen ein + b = 100' vor dem Start dieser Linie? Ich kann deine Ergebnisse nicht replizieren, und 'Let'' Definitionen in Ghci sind irgendwie Stateful. – BluePeppers
Auch die korrekte Ausgabe sollte wahrscheinlich '[(3,4,5), (6,8,10)]' sein, was ich bekomme (und passt sowohl zur Wikipedia-Seite als auch zu meiner Mathematikausbildung als die ersten 2 Pythagoreische Tripel) – BluePeppers
@BluePeppers Ich denke du hast es, denn nach 'let a + b = 100', ergibt das Listenverständnis * * [(1,1,1)] '. –