In Haskell, der folgende Code druckt "[1,2,3,4,5":Ausdruck eifrig in Frege aber faul in Haskell?
foo = take 10 $ show $ numbersFrom 1 where
numbersFrom start = start : numbersFrom (start + 1) -- could use [1..]
Aber in Frege Es wirft OutOfMemoryError
mit dem folgenden Code:
foo = take 10 $ unpacked $ show $ numbersFrom 1 where
numbersFrom start = start : numbersFrom (start + 1)
Hier ist die einziger Unterschied ist die unpacked
Funktion, die notwendig ist, um von String
zu [Char]
und FWIW zu konvertieren, die unpacked
Funktion ist eifrig. Warum kann der ganze Ausdruck nicht so faul sein wie in Haskell? Kann man hier in Frege etwas Ähnliches wie Haskell erreichen?
Strings in Frege sind keine Listen. So kann 'take 10' nicht auf das Ergebnis von' show' angewendet werden. Daher wird "entpackt" verwendet, um zuerst von "String" in "[Char]" umzuwandeln, und dann wird "Take 10" auf die Liste angewendet. –
Was sind 'Saiten' in Frege? Es scheint, dass sie 'java.lang.String' sind (siehe Definition der Frege-Sprache). Sie werden es nie schaffen, "Entpacken" auszuwerten, da es niemals in der Lage ist, die Zeichenfolge zu erstellen! –