Das Filtern einer unendlichen Folge erzeugt eine unendliche Folge und das Reduzieren über diesen Ursachen-Filter, um nach einem anderen übereinstimmenden Gegenstand zu suchen, selbst nachdem das Prädikat nicht mehr wahr ist.
Ersetzen Sie filter
durch take-while
. Die unendliche Sequenz, die von (fib)
generiert wird, führt dazu, dass filter
für immer ausgeführt wird. Vorher bricht sie jedoch aufgrund des aufgetretenen ArithmeticException
ab. take-while
stoppt die weitere Auswertung der Liste, nachdem das (fn [x] (< x n))
Prädikat zu false ausgewertet wurde.
beginnend mit clojure 1.3.0 Nummern werden nicht automatisch auf bigInt / bigDecimal hochgestuft.
um dies zu beheben, benutze stattdessen +'
Ihre 100. Fibinachi-Zahl ist zu groß für eine ganze Zahl
%Vor%Tags und Links clojure lazy-evaluation integer-overflow