Solucionat: llista infinita

Darrera actualització: 09/11/2023

Haskell és un llenguatge de programació purament funcional conegut per les seves característiques i abstracció d'alt nivell. Una àrea notable on irradia el poder de Haskell és treballar amb llistes infinites. Amb l'avaluació mandrosa de Haskell, podem representar i manipular llistes infinites sense tenir problemes d'esgotament de la memòria tret que demanem específicament consumir la llista completament. Imagineu una llista que continua contínuament, com els nombres de l'1 a l'infinit, aquesta llista és una llista infinita.

Llistes infinites a Haskell

A Haskell, hi ha nombroses funcions per fer front a llistes infinites. El més bàsic és

repeat

. Aquesta funció pren un valor i produeix una llista infinita feta d'aquest valor. Per exemple,

repeat 7

donarà una llista infinita de sets. Una altra funció útil en aquest context és la

iterate

funció. Aquesta funció pren una funció i un valor inicial. Aplica la funció al valor inicial, després aplica la funció al resultat, després al resultat del resultat, i així successivament, generant una llista infinita.

Les llistes infinites, tot i que aparentment descoratjadores, són fàcils de gestionar amb Haskell, gràcies al model d'avaluació mandrosa de Haskell. Aquesta característica permet a Haskell avaluar una expressió només quan el seu valor és necessari, proporcionant així una manera eficient de treballar amb llistes infinites.

Codificació amb llistes infinites

Aprofundim en alguns codis Haskell pràctics que exploten el concepte de llistes infinites. Un problema comú que podem resoldre amb llistes infinites és generar una llista de tots els nombres primers.

El codi següent resol aquest problema de manera elegant:

primes = filterPrime [2..] 
  where filterPrime (p:xs) = 
          p : filterPrime [x | x <- xs, x `mod` p /= 0&#93;
&#91;/code&#93;

In this code, the function &#91;code lang="Haskell"&#93;filterPrime&#91;/code&#93; takes the first number from the list (which is a prime) and concatenates it with the result of filtering out the multiples of that prime number from the rest of the list. The function &#91;code lang="Haskell"&#93;filterPrime&#91;/code&#93; then recursively calls itself to generate all prime numbers.

<b>With the above code, we not only solved our limitation but also illustrated the power and efficiency of Haskell's infinite lists.</b>

<h2>Understanding the Libraries</h2>

Haskell's standard library, GHC.Base, provides several functions that are crucial to the manipulation of infinite lists. These functions include [code lang="Haskell"]cycle

,

iterate

i

repeat

, Entre d'altres.

Per exemple,

repeat

La funció ofereix una manera senzilla de crear una llista infinita. Mentrestant, el

cycle

La funció pren una llista finita i la replica infinitament.

iterate

, en canvi, ofereix més flexibilitat ja que ens permet generar una llista infinita aplicant repetidament una funció.

Entendre com utilitzar aquestes biblioteques i funcions és fonamental per dominar les llistes infinites en Haskell. Gràcies a aquestes, la creació i gestió de llistes infinites es converteix en tasques que podem executar amb facilitat i elegància.

Articles Relacionats: