Właśnie zaczynam uczyć się programowania funkcjonalnego, mój wybór to haskell. To było ok przez kilka dni, aż coś bizzare zdarzyć w konsoliHaskell wypluwa złe liczby losowo
Na początku myślałem, samouczek (http://learnyouahaskell.com/starting-out) jest źle
Prelude> [ (a,b,c) | c <- [1..10], b <- [1..c], a <- [1..b], a^2 + b^2 == c^2]
[(1,1,1)]
Należy (3,4,5)
i (4,6,8)
. Próbowałem 3^2+5^2
, wypluwa to mnóstwo liczb (coś w rodzaju 60 wierszy liczb, około 3000 cyfr); 4^2+3^2
wydaje się wytwarzać te same liczby.
Próbując dodać dowolne numery wynik będzie 100
Prelude> 100 + 200
100
Prelude> 300 + 500
100
zamknę okno i ponownie otworzyć go i problem został rozwiązany.
Czy to błędne obliczenie często miało miejsce w Haskell? a może moja wersja Haskella jest uszkodzona podczas pobierania? lub Jest szansa, że to rzadki błąd?
Czy jesteś pewien, że nie zrobił czegoś podobnego niech ' + b = 100' przed uruchomieniem tej linii? Nie mogę replikować twoich wyników, a definicje "let" w ghci są trochę stanowe. – BluePeppers
Również poprawne wyjście powinno być prawdopodobnie "[(3,4,5), (6,8,10)]", co jest tym, co otrzymuję (i odpowiada zarówno stronie Wikipedii, jak i mojej edukacji matematycznej jako pierwsze 2 Trójki pitagorejskie) – BluePeppers
@BluePeppers Myślę, że go masz, ponieważ po 'let a + b = 100', to zrozumienie listy * nie * daje' [(1,1,1)] '. –