Kuxazululiwe: ingxenye yokugcina yohlu

Isibuyekezo sokugcina: 09/11/2023

Emkhakheni wohlelo lwe-Haskell, izinhlu zokuphatha zakha ingxenye ebalulekile. Uhlu lubaluleke kakhulu njengoba lusivumela ukuthi sigcine izinto eziningi zohlobo olufanayo. Lapho usebenza ngezinhlu, ngokuvamile, kuyadingeka ukulanda isici sokugcina. Yize kungase kubonakale kuqondile, lokhu kusebenza kudinga ukuqonda kahle ukuthi i-Haskell ilusebenzisa kanjani uhlu. Kulesi sihloko, sihlolisisa imininingwane mayelana nokulanda into yokugcina ohlwini sisebenzisa i-Haskell.

Enye indlela yokulanda ingxenye yokugcina yohlu ukusebenzisa indlela yakudala ephindaphindayo, eyenza i-Haskell ibe yinketho yokuhlela esebenzayo. Umqondo oyisisekelo uwukunqamula uhlu size sifike ekugcineni, bese ubuyisela leyo elementi. Lo msebenzi ungafezeka ngenxa yamaphethini atholakala ku-Haskell kanye nokuphindaphinda komsila. Cabangela amazwibela alandelayo ekhodi ye-Haskell:

lastElem :: [a] -> a
lastElem [x] = x
lastElem (_:xs) = lastElem xs

Kule khodi, sichaza umsebenzi obizwa ngokuthi 'lastElement' olanda into yokugcina ohlwini. Umsebenzi usebenzisa ukufanisa amaphethini ezimweni ezimbili: lapho uhlu luqukethe into eyodwa kuphela, nalapho uhlu lunezinto ezingaphezu kweyodwa. Esimweni sesibili, luzibiza ngokuphindaphindeka kuze kube yilapho lufika kwinto yokugcina.

Ukuqonda Umsebenzi

Kumazwibela we-Haskell anikezwe ngenhla, umsebenzi othi `lastElem` usebenzisa ukufanisa iphethini ukuze ubhekane nezimo ezimbili. Ukufaniswa kwephethini ku-Haskell kuyindlela yokuhlola idatha ngokuqhathanisa namafomu athile futhi wenze izenzo ezisuselwe efomini elimeshayo.

Enhliziyweni yale ndlela kukhona iphethini ethi '(_:xs)'. Ivumela umsebenzi ukuthi uphathe noma yiluphi uhlu olunezakhi ezingaphezu kweyodwa ngokusebenzisa i-recursion. I-underscore (_) isebenza njengekhadi lasendle elinganaki ikhanda lamanje lohlu futhi umsebenzi ubizwa futhi ngohlu lonke (xs).

Bheka ngokujulile Isixazululo Esiphindaphindayo

Ubuhle bangempela balo msebenzi busesimeni sawo sokuphindaphinda. Ukunqamula uhlu, izibiza yona, kaninginingi, inqamula ingxenye eyinhloko yohlu kuze kusele into eyodwa kuphela. Uma lokho sekwenzekile, kufana nephethini ye-'[x]' futhi ibuyisela leyo elementi eyodwa. Lokhu kwakha isisekelo sonke sokufika engxenyeni yokugcina ohlwini.

Nakuba le ndlela icocekile futhi isebenza kahle ezimweni eziningi, ingaphahlazeka uma ibizwe ngohlu olungenalutho. Lokhu kungenxa yokuthi umsebenzi wethu awusiphathi isimo lapho uhlu lungenalutho.

Ukuphatha Uhlu Olungenalutho

Singathuthukisa umsebenzi wethu we-'lastElem' ngokwengeza isimo sokuphatha uhlu olungenalutho. Singasebenzisa uhlobo lwedatha oluthi 'Mhlawumbe' ku-Haskell, olusivumela ukuthi simelele amanani ongawakhetha. Nasi isibonelo:

lastElem :: [a] -> Maybe a
lastElem [] = Nothing
lastElem [x] = Just x
lastElem (_:xs) = lastElem xs

Kulo msebenzi oguquliwe, uma uhlu olungenalutho ludluliswa , luzobuyisa u-'Lutho'. Kuhlu olunezakhi, luzobuyisa u-'Just x', lapho u-'x' eyinto yokugcina yohlu.

Kafushane, ukubhekana nezinhlu kuyisisekelo esihlelweni esisebenzayo, kodwa kudinga ukuqonda kahle ukwakhiwa kolimi. Isibonelo esichazwe kulesi sihloko sinikeza ukubuka konke kokuthi ungayilanda kanjani ingxenye yokugcina yohlu, ukufanisa iphethini esebenzayo nokuphindaphinda ku-Haskell.

Okuthunyelwe okuhlobene: