Zuerst änderte ich den Namen Ihrer ersten t2s
zu t1s
, so dass ich sie beide in Ghci zur gleichen Zeit geladen haben kann. Schauen Sie sich die abgeleiteten Typen für jeden von ihnen:
[ts.hs:2:1-33] *Main> :t t1s
t1s :: (Enum t, Fractional t) => t -> [t]
[ts.hs:2:1-33] *Main> :t t2s
t2s :: (Enum t, Num t) => t -> [t]
[ts.hs:2:1-33] *Main>
Beachten Sie, dass t1s
nimmt Fractional
Argument während t2s
eine Num
nimmt. Dies bedeutet, dass in t1s 0
die 0
als Double
gewertet wird. Der Interpreter wiederum gibt 0
als Integer
in t2s 0
an. Da der für das Argument verwendete Typ unterschiedlich ist, kann das Verhalten auf sehr überraschende Weise variieren. Insbesondere sollten Sie sicher sein, nur Integral
Typen zu verwenden, wenn Sie eine Liste wie in [1,3..n]
auflisten.
Um dies zu beheben, müssen Sie nur explizite Typ-Signaturen für beide Funktionen bereitstellen.
Zum Erhöhen der Gleitkommazahl bleibt [a, b .. c] solange aktiv, bis die Zahlen c + (b-a)/2,0 überschreiten. Zum Beispiel ist [1.0, 2.0 .. 4.0] [1.0, 3.0, 5.0]. –
Was ist in Ihrem Beispiel mit 2.0 und 4.0 passiert? –
@ Code-Guru. Mea culpa. Ich meinte [1.0, 3.0 .. 4.0]. Vielen Dank. –