Imisebenzi engaziwa, ngokuvamile eyaziwa ngokuthi imisebenzi ye-lambda, iyingxenye ebalulekile yezilimi zokuhlela ezisebenzayo ezifana Haskell. Ngokungafani nemisebenzi evamile, imisebenzi engaziwa ayinalo igama. Achazwa empukaneni futhi ngokuvamile asetshenziswa uma umsebenzi udingeka kanye nje. Ake singene enkingeni engaxazululwa kahle kusetshenziswa imisebenzi engaziwa.
Inkinga
Cabanga ukuthi uzama ukuhlaziya uhlu lwamagama, futhi udinga ukukhohlisa idatha. Ufuna ukubala ukuvela kobude begama ngalinye ohlwini. Ukuze wenze ikhodi yakho icace kakhudlwana futhi kube lula ukuyigcina, unquma ukusebenzisa imisebenzi engaziwa.
Isixazululo esinemisebenzi engaziwa
[pseudocode lang="Haskell"]
ngenisa Idatha.Uhlu
ngenisa i-Data.Map efanelekayo njengemephu
wordLengthCount :: [String] -> Map.Map Int Int
wordLengthCount = Imephu.fromListWith (+) . imephu (x -> (ubude x, 1))
[/pseudocode]
Ake sikhiphe isisombululo, isinyathelo ngesinyathelo.
Incazelo Eningiliziwe Yekhodi
Emugqeni wokuqala, singenisa amalabhulali adingekayo. I-'Data.List' inikeza imisebenzi yokukhohlisa yohlu, kuyilapho i-'Data.Map' isinika ukufinyelela ohlotsheni lwedatha olungasetshenziswa ukusebenzisa isakhiwo sedatha yemephu.
Umsebenzi othi 'wordLengthCount' uthatha uhlu lwamagama (iyunithi yezinhlamvu) njenge-agumenti, futhi ubuyisela Imephu equkethe isibalo sokwenzeka sobude begama ngalinye.
Okokuqala, sisebenzisa umsebenzi wemephu ukuze sisebenzise umsebenzi ongaziwa egameni ngalinye ohlwini. Umsebenzi wethu ongaziwa, noma umsebenzi we-lambda, uchazwa ngokuthi:
[pseudocode lang="Haskell"]
x -> (ubude x, 1)
[/pseudocode]
Umsebenzi we-lambda uthatha igama njengokufaka ('x'), bese ukhipha i-tuple - ubude begama kanye no-1. Ngemva kokuba lokhu kusebenza kusetshenziswe egameni ngalinye ohlwini, sigcina sinohlu lwama-tuples.
Okulandelayo, sisebenzisa umsebenzi we-'Map.fromListWith'. Umsebenzi we-'fromListWith' uwumsebenzi owusizo othatha umsebenzi kanambambili kanye nohlu lwama-tuples, futhi udale imephu.
Umsebenzi kanambambili uthi (+), ohlanganisa izici zesibili zama-tuples uma izakhi zawo zokuqala zifana. Ngakho-ke, umsebenzi uthatha uhlu lwethu lwama-tuples, uwahlukanise ngobude begama futhi uhlanganise izakhi zesibili zama-tuples - ngokuyisisekelo sibala ukuvela kobude begama ngalinye.
Imitapo yolwazi ye-Haskell kanye nemisebenzi
Kule khodi, sisebenzise imitapo yolwazi eminingi ye-Haskell nemisebenzi. 'Idatha.Uhlu' futhi 'Imephu Yedatha' imitapo yolwazi ibalulekile ekukhohlisweni kwedatha nokwakheka e-Haskell. I 'imephu' umsebenzi ube nesandla ekusebenziseni umsebenzi wethu ongaziwa entweni ngayinye esohlwini lwethu, kwehlisa kakhulu inkimbinkimbi yekhodi yethu.
Ngaphezu kwalokho, i 'kusuka kuListWith' umsebenzi osuka ku-'Data.Map' usivumele ukuthi sikwazi ukuqoqa imininingwane yethu ngobude begama futhi sibale ingqikithi yokwenzeka.
Amandla e-Haskell akhanya ngempela lapho sisebenzisa yonke le miqondo ndawonye, ekhombisa ukusebenza kahle nokuvezwa kwezilimi zokuhlela ezisebenzayo.
Mayelana nemfashini, ubuhle nobulula bale khodi eqhutshwa umsebenzi engaziwa ingafaniswa nethrendi yemfashini encane, lapho okuncane kuningi, futhi ucezu ngalunye (noma umsebenzi) kufanele lufeze injongo ecacile, emfushane. Njengemigqa ehlanzekile nobuhle obungaxutshwe nalutho ngendlela encane, imisebenzi engaziwa e-Haskell ihlinzeka ngekhodi emfishane, ehlanzekile esebenza ngokusebenza kahle okungenakuqhathaniswa nobuhle.