recentemente, studiando per un esame, mi sono imbattuto nel seguente esercizio in Haskell:
Un numero naturale n si dice perfetto se la somma dei suoi divisori (incluso n) è pari a 2n.
Escluso lo 0 (che non è perfetto per convenzione) i primi tre numeri perfetti sono 6, 28 e
496. Senza usare list comprehension o funzioni della libreria standard, definire una funzione
- Codice:
perfetto:: Int => Bool
che, applicata a n, determina se n è perfetto.
ovviamente la limitazione circa l' uso di funzioni della libreria standard non comprende +,- o altre funzioni con nome simbolico.
Quello che non capisco è: esiste un modo per iterare su una lista senza usare head, tail o list comprehension? Ho provato con l' operatore !!, tuttavia non vi è modo(che io sappia) di determinare se l' elemento al quale si tenta di accedere esista, a meno che non si compari l'indice con length che, tuttavia, è comunque una funzione della libreria standard.
Saluti.