• [^] # Re: "Tail call optimization"

    Posté par . En réponse au journal Chantonnons en récursion. Évalué à 2.

    En Haskell c'est rigolo aussi :

    -- love.hs
    love = blood
    blood = head
    head = love
    main = love
    
    
    > ghc -XNoImplicitPrelude love.hs
    > ./love
    love: <<loop>>
    
    

    Par contre la version suivante boucle :

    import Prelude ((>>), return)
    love = blood
    blood = head
    head = return () >> love
    main = love
    
    

    C'est plus « naturel » comme comportement, main étant de type IO (), l'inférence de types remonte jusqu’à head et le trouve de type IO () aussi, et donc l’évaluation de return () est stricte (love en a besoin).

    Please do not feed the trolls