Haskell – 22 – ricorsione – 8

Continuo da qui, copio qui, scrollare fino a “Exercises”.

Sempre con gli esercizi 😋

4. In the previous chapter, we introduced the ellipsis list notation in Haskell, which allows us to write

[m..n]

as shorthand for the list

[m, m+1, m+2, ..., n]

for numbers m and n, with n greater or equal m. Write a recursive function enumFromTo which produces such a list given m and n, such that

enumFromTo m n = [m..n]

As enumFromTo is a Prelude function, you have to add the line

import Prelude hiding (enumFromTo)

to your program.

enum.hs

import Prelude hiding (enumFromTo)

enumFromTo :: Int -> Int -> [Int]
enumFromTo m n = enumFromToAcc [] m n
  where
    enumFromToAcc :: [Int] -> Int -> Int -> [Int]
    enumFromToAcc acc m n
      | m == n    = (m : acc)
      | otherwise = m : (enumFromToAcc acc (m + 1) n)
Prelude> :l enum
[1 of 1] Compiling Main             ( enum.hs, interpreted )
Ok, 1 module loaded.
*Main> enumFromTo 3 12
[3,4,5,6,7,8,9,10,11,12]
*Main> enumFromTo 5 5
[5]

5. Write a recursive function countOdds which calculates the number of odd elements in a list of Int values:

countOdds [1, 6, 9, 14, 16, 22] = 2

Hint: You can use the Prelude function odd :: Int -> Bool, which tests whether a number is odd.

countOdds.hs

countOdds :: [Int] -> Int
countOdds []  = 0
countOdds (x:xs) 
  | odd x     = 1 + countOdds xs
  | otherwise = countOdds xs
*Main> :l countOdds
[1 of 1] Compiling Main             ( countOdds.hs, interpreted )
Ok, 1 module loaded.
*Main> countOdds [1, 6, 9, 14, 16, 22]
2
*Main> countOdds [2, 3, 5, 7, 11, 13, 17, 19]
7

Devo ambientarmi 😡 La funzione è semplicissima ma ho pasticciato parecchio per arrivarci 😡 Forse non sono stato abbastanza attento a lezione 😡

🤢

Posta un commento o usa questo indirizzo per il trackback.

Trackback

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

%d blogger hanno fatto clic su Mi Piace per questo: