An warware: cire kwafi a jere

Sabuntawa na karshe: 09/11/2023

Na farko, fahimtar matsalar yana da matukar muhimmanci. Kwafi a jere a cikin jeri yana faruwa ne lokacin da ma'aunin bayanai iri ɗaya ya faru a wurare biyu ko fiye a cikin tsararru, amma sai idan waɗannan kwafin sun faru a jere. Misali, a cikin jeri [1, 2, 2, 3, 2], ana kwafi ma'aunin bayanan '2', amma ba a la'akari da shi a matsayin kwafi a jere saboda baya cikin jere da '2' na farko. Koyaya, lissafin [1, 2, 2, 3] ya ƙunshi nau'i biyu na '2' a jere.

Don wannan fitowar, Haskell yana ba da sauƙi mai sauƙi, ingantaccen ingantaccen bayani tare da ginanniyar ayyukan ɗakin karatu. Musamman, aikin 'ƙungiyar' daga ɗakin karatu na 'Data.List` za a yi amfani da shi.

import Data.List (group)

removeDuplicates :: Eq a => [a] -> [a]
removeDuplicates = map head . group

Wannan gajeriyar gajeriyar lambar snippet tana kawar da kwafi a jere ta hanyar rarraba jerin asali zuwa jerin abubuwan da aka kwafin (rukuni), sannan a maye gurbin kowane jerin jerin da kashi na farko (kan taswira).

Fahimtar aikin cire Duplicates

Don ƙarin fahimtar yadda lambar ke aiki, bari mu karya shi.

Ana shigo da ɗakin karatu mai mahimmanci: Lambar tana farawa da 'shigo da Data.List (ƙungiyar)'. Anan, muna shigo da aikin 'ƙungiyar' daga ɗakin karatu na 'Data.List'. 'Ƙungiya' aiki ne mai matuƙar amfani a cikin Haskell wanda ke raba jeri zuwa jerin ƙananan abubuwa masu kama da juna.

Ƙayyadaddun aikin: Sai mu matsa zuwa `cire Duplicates :: Eq a => [a] -> [a]`. Wannan shine nau'in sanarwar don aikinmu. Yana faɗi kawai cewa aikinmu yana ɗaukar jerin kowane nau'in bayanai 'a' (inda 'a' memba ne na ajin 'Eq', ko kuma ana iya bincika don daidaito), kuma zai dawo da jerin nau'in bayanai iri ɗaya.

Cikakken Bayanin Matakai

Yanzu, mai da hankali kan ɓangaren `removeDuplicates = shugaban taswira. group`, ita ce ma'anar aikinmu wanda ke kimanta kyawun fasalulluka na shirye-shiryen Haskell.

Haɗin aiki: Kalmar tana amfani da '.' ma'aikaci wanda a cikin Haskell, yana nufin tsarin aiki. Ainihin muna ƙirƙirar sabon aiki ta hanyar haɗa 'ƙungiyar' da 'madarar taswira'.

aikin 'group': Aikin 'rukuni' yana ɗaukar jerin abubuwan da muka shigar kuma su rarraba shi cikin jerin ƙananan abubuwa inda aka haɗa duk abubuwa iri ɗaya masu kama da juna.

Aikin 'map head': Sa'an nan kuma 'map head' ya ci gaba kuma ya maye gurbin kowane ƙananan lissafin tare da kashi na farko na wannan ƙananan lissafin - yana cire duk kwafi a jere. Ana yin shi ta hanya mai inganci kuma ana iya karanta shi ma.

Wannan lambar tana misalta yadda za mu iya amfani da ingantaccen ayyukan laburare masu wadatar Haskell da fasalulluka na shirye-shirye don yin abubuwa da yawa da ɗan kaɗan.

Haskell Library da Ayyuka

Girman Haskell ya ta'allaka ne a cikin tallafin ɗakin karatu da ayyukan ginannen ayyuka. Haskell's Data.List library wata taska ce ta ayyuka masu amfani don sarrafa jeri, 'kungiyar' tana ɗaya daga cikinsu. Hakanan za'a iya amfani da wani aiki, 'nub', don cire duk kwafi ba tare da la'akari da matsayinsu ba.

Ɗaukakar ɗakunan karatu da ƙwaƙƙwaran bugawa, tsarin tsara shirye-shirye suna sa Haskell ya zama yare mai sassauƙa kuma abin dogaro don magance matsalolin duniya na gaske. Bayan haka, ƙayyadaddun ƙayyadaddun fahimta yana sanya kuskuren lamba da fahimta madaidaiciya.

Shafi posts: