a Haskell, i codice seguente stampa "[1,2,3,4,5":Espressione desiderosa a Frege ma pigra a Haskell?
foo = take 10 $ show $ numbersFrom 1 where
numbersFrom start = start : numbersFrom (start + 1) -- could use [1..]
Ma in Frege, getta OutOfMemoryError
con il seguente codice:
foo = take 10 $ unpacked $ show $ numbersFrom 1 where
numbersFrom start = start : numbersFrom (start + 1)
Qui il l'unica differenza è la funzione unpacked
necessaria per convertire da String
a [Char]
e FWIW, la funzione unpacked
è impaziente. Perché l'intera espressione non può essere pigra come in Haskell? È possibile ottenere qualcosa di simile a Haskell in Frege qui?
Le stringhe in Frege non sono elenchi. Quindi 'take 10' non può essere applicato al risultato di' show'. Quindi 'unpacked' è usato per convertire prima da' String' a '[Char]' e quindi 'take 10' è applicato alla lista. –
Quindi quali sono 'String's in Frege? Sembra che siano 'java.lang.String' (vedi la definizione di Frege Language). Non riuscirai mai a valutare 'unpack' perché non sarà mai in grado di costruire la stringa! –