Nalutas: walang katapusang listahan

Huling pag-update: 09/11/2023

Ang Haskell ay isang purong functional na programming language na kilala sa mga high-level na feature at abstraction nito. Ang isang kahanga-hangang lugar kung saan ang kapangyarihan ng Haskell ay kumikinang ay sa pagtatrabaho sa mga walang katapusang listahan. Sa tamad na pagsusuri ng Haskell, maaari naming katawanin at manipulahin ang mga walang katapusang listahan nang hindi nagkakaroon ng mga isyu ng pagkaubos ng memorya maliban kung partikular naming hihilingin na ubusin ang listahan nang buo. Isipin ang isang listahan na patuloy na nagpapatuloy, tulad ng mga numero mula 1 hanggang infinity, ang naturang listahan ay isang walang katapusang listahan.

Mga Infinite List sa Haskell

Sa Haskell, mayroong maraming mga pag-andar upang harapin ang mga walang katapusang listahan. Ang pinaka-basic ay

repeat

. Ang function na ito ay tumatagal ng isang halaga at gumagawa ng isang walang katapusang listahan na ginawa ng halagang iyon. Halimbawa,

repeat 7

ay magbubunga ng isang walang katapusang listahan ng mga pito. Ang isa pang kapaki-pakinabang na function sa kontekstong ito ay ang

iterate

function. Ang function na ito ay tumatagal ng isang function at isang panimulang halaga. Inilalapat nito ang function sa panimulang halaga, pagkatapos ay inilalapat nito ang function sa resulta, pagkatapos ay sa resulta ng resulta, at iba pa, na bumubuo ng isang walang katapusang listahan.

Ang mga walang katapusang listahan, kahit na tila nakakatakot, ay madaling hawakan sa Haskell, salamat sa tamad na modelo ng pagsusuri ng Haskell. Ang tampok na ito ay nagpapahintulot sa Haskell na suriin ang isang expression lamang kapag ang halaga nito ay kinakailangan, samakatuwid ay nagbibigay ng isang mahusay na paraan upang gumana sa mga walang katapusang listahan.

Pag-coding gamit ang Walang-hanggan na Listahan

Suriin natin ang ilang praktikal na Haskell code na nagsasamantala sa konsepto ng mga walang katapusang listahan. Ang isang karaniwang problema na maaari nating lutasin sa mga walang katapusang listahan ay ang pagbuo ng isang listahan ng lahat ng prime number.

Ang sumusunod na code ay malulutas ang problemang ito nang elegante:

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

, at

repeat

, Bukod sa iba pa.

Halimbawa,

repeat

Nag-aalok ang function ng isang simpleng paraan upang lumikha ng isang walang katapusang listahan. Samantala, ang

cycle

Ang function ay tumatagal ng isang may hangganang listahan at ginagaya ito nang walang hanggan.

iterate

, sa kabilang banda, ay nag-aalok ng higit na kakayahang umangkop dahil pinapayagan kaming bumuo ng isang walang katapusang listahan sa pamamagitan ng paulit-ulit na paglalapat ng isang function.

Ang pag-unawa sa kung paano gamitin ang mga library at function na ito ay mahalaga sa pag-master ng mga walang katapusang listahan sa Haskell. Salamat sa mga ito, ang paggawa at pamamahala ng mga walang katapusang listahan ay nagiging mga gawain na maaari naming isagawa nang madali at elegante.

Kaugnay na mga post: