Die folgende funktioniert:Summe von Vielfachen von 3 und 5 unter 1000 in Haskell
sdb n = sum [n,n*2..999]
main = print $ sdb 3 + sdb 5 - sdb 15
Aber es ist nicht so effizient, da es 999/n-mal jedes Mal sdb genannt wird summiert hat. wenn ich sdb neu geschrieben:
sdb n =
let x = quot 999 n
in n*x*(x+1)/2
und runhaskell
der gesamte Code, habe ich eine ganze Seite des Irrtums. Summieren it up:
... No instance for (Show a0) arising from a use of `print'
... No instance for (Integral a0) arising from a use of `sdb'
... No instance for (Num a0) arising from a use of `-'
Ich habe Typdeklaration für sdb:
sdb :: Integer -> Integer
aber ich habe einen anderen Fehler:
No instance for (Fractional Integer) arising from a use of `/'
Possible fix: add an instance declaration for (Fractional Integer)
In the expression: n * x * (x + 1)/2
In the expression: let x = quot 999 n in n * x * (x + 1)/2
In an equation for `sdb':
sdb n = let x = quot 999 n in n * x * (x + 1)/2
ich nicht bekommen.
Was soll ich korrigieren? Kannst du mir auch erklären, warum ich diese Fehler bekommen habe? Gelöst: Ich änderte
/
mitdiv
.Gibt es einen idiomatischen und/oder prägnanten Weg, denselben Algorithmus zu schreiben?
Es ist 'Integer'. 'Integral' ist eine Typklasse. – zakyggaps
danke, korrigiert, aber ich bekomme immer noch einen Fehler – Pigna
'/' in 'n * x * (x + 1)/2 'ist nur für Bruchteile definiert. Sie können stattdessen "quot" oder "div" verwenden. – zakyggaps