Mönstermatchning
Mönstermatchning(pattern matching på engelska) är en syntax-metod inom programmering föratt låta en funktion uppföra sig på ett speciellt vis genom att jämföra ett antal funktionsdefinitioner mot hur indatat ser ut.Språk som använder sig av mönstermatchning
- SML
- Caml/OCaml
Exempel
I SML kan en rekursiv funktion för att summera heltal i en lista se ut så här:
fun summeraHeltal( [] ) = 0 | summeraHeltal( d::r ) = d + summeraHeltal( r );
Den tar en lista (t.ex. [1,2,3]) som argument. Beroende på hur argumentet ser ut så väljer programmet attta den ena eller andra definitionen på funktionen. [] betecknar en tom lista. d::r betyder att man ska sed som ett tal konkatenerat (::) med listan r. Tecknet | kan utläsas som ett eller.
Om argumentet t.ex. är [1,2,3] så ser exekveringen ut ungefär så här:
summeraHeltal( [1,2,3] ) väljer den andra definitionen eftersom listaninte är tom. Då används d::r för att matchalistan som 1::[2,3] (d: :r - där d står för del och r för rest)
summeraHeltal( [1,2,3] ) = 1 + summeraHeltal([2,3]
I det här fallet så upprepas matchingen och listan matchas som2::[3] vilket ger
summeraHeltal( [1,2,3] ) = 1 + 2 + summeraHeltal([3])
Nu så finns det bara ett element kvar i listan (3) och dettamatchas som 3 konkatenerat med den tomma listan ([]). D.v.s. 3::[]
summeraHeltal( [1,2,3] ) = 1 + 2 + 3 + summeraHeltal([])
Nu så matchar summeraHeltal den första definitionen
summeraHeltal( [1,2,3] ) = 1 + 2 + 3 + 0
När funktionen nått så här långt så är det bara att stega rekursionenbaklänges och utföra additionen.
summeraHeltal( [1,2,3] ) = 6
Artikeln skriven 2009-01-17 av Learning4sharing
Inga kategorier för denna artikel än...Intresserad av fler artiklar?
Jupiter AceSpagettikod
COMAL
DarkBASIC Classic
DarkBASIC Professional
Grafisk miniräknare
Peek
Poke
Mnemonic