Diagrama de flujo. Esta vieja y antigua práctica que ha estado en uso por más de 1000 años ahora, se nos ha impuesto a nosotros, estudiantes pobres, sin ningún tipo de utilidad (o eso creo yo). Puede funcionar bien con lenguajes imperativos que se ejecutan secuencialmente, pero ¿qué pasa con mi amada programación funcional?Diagramas de flujo de programación funcional
Tristemente, me veo forzado a crear un diagrama de flujo para mi programa (que está escrito en Haskell).
que imaginar que es fácil que algo como esto:
main :: IO()
main = do
someInput <- getLine
let upped = map toUpper someInput
putStrLn upped
que está a sólo 3 pasos secuenciales, ir a buscar los datos, uppercasing ella, darle salida.
Las cosas se ven peor esta vez:
main :: IO()
main = do
someInput <- fmap toUpper getLine
putStrLn someInput
O así:
main :: IO()
main = interact (map toUpper)
bien, eso era IO, que puede manejar eso como un lenguaje imperativo. ¿Qué hay de las funciones puras?
Un ejemplo real:
onlyMatching :: String -> [FilePath] -> [FilePath]
onlyMatching ext = filter f
where f name = lower ('.' : ext) == (lower . takeExtension $ name)
lower = map toLower
¿Cómo le diagrama de flujo que la última?
¿Por qué está obligado a hacer un diagrama de flujo para un programa en Haskell? –
@David: Probablemente algo así como "Asignación A: crea el siguiente programa en el idioma que elijas. Asignación B: crea un diagrama de flujo para tu programa" – sepp2k
Los diagramas de flujo no funcionan bien con la evaluación diferida, ¿eh? –