CAML

CAML er en dialekt af ML programmeringssproget familie, udviklet på INRIA og tidligere på ENS.

Ligesom mange efterkommere af ML, er Caml statisk indtastet strengt evalueret, og bruger automatisk styring af hukommelse.

Den første Caml implementering i Lisp fik tilnavnet "Heavy CAML" på grund af dens hukommelse og CPU-krav i forhold til dens efterfølger Caml Light, der blev implementeret i C af Xavier Leroy og Damien Doligez. Ud over en komplet omskrivning, CAML særligt lys tilsat en meget kraftig modulsystem til kernen sprog.

I øjeblikket er det vigtigste gennemførelse af Caml er OCaml, som tilføjer mange nye funktioner til det sprog, herunder et objekt lag.

Eksempler

I det følgende, # repræsenterer OCaml prompt.

Hej Verden

Fakultet funktion

Mange matematiske funktioner, såsom fakultet, er mest naturligt repræsenteret i et rent funktionelt form. Følgende rekursive, rent funktionel Caml funktionen implementerer fakultet:

Funktionen kan skrives ækvivalent hjælp mønster matching:

Sidstnævnte form, er den matematiske definition af fakultet som en gentagelse forhold.

Bemærk, at compileren udledte den type af denne funktion til at være int - & gt; int, hvilket betyder, at denne funktion kortlægger ints på ints. For eksempel, 12! er:

Numerisk derivat

Da OCaml er et funktionelt programmeringssprog, er det let at oprette og passere omkring funktioner i OCaml programmer. Denne evne har en enorm antal ansøgninger. Beregning af numeriske afledede af en funktion er en sådan anvendelse. Følgende Caml funktionen d beregner den numeriske derivat af en given funktion f på et givet punkt x:

Denne funktion kræver en lille værdi delta. Et godt valg til delta er kubikroden af ​​maskinen epsilon.

Typen af ​​funktionen d angiver, at det kortlægger en svømmer på en anden funktion med den type - & gt; float - & gt; flyde. Dette giver os mulighed for delvist at anvende argumenter. Denne funktionelle stil er kendt som beredningsmetode. I dette tilfælde er det nyttigt at delvist anvende første argument delta til d, for at opnå en mere specialiseret funktion:

Bemærk, at den udledte typen angiver, at udskiftningen d forventer en funktion med typen float - & gt; flyde som sin første argument. Vi kan beregne en numerisk tilnærmelse til differentialkvotienten af ​​x ^ 3 - x - 1 ved x = 3 med:

Det korrekte svar er f '= 3x ^ 2 - 1 = & gt; f '= 27 - 1 = 26.

Funktionen d kaldes en "højere ordens funktion", fordi den accepterer en anden funktion som et argument.

Begreberne karry og højere ordens funktioner er klart anvendelige til matematiske programmer. I virkeligheden er disse begreber er lige så anvendelige til de fleste andre former for programmering og kan anvendes til faktor kode meget mere aggressivt, hvilket resulterer i kortere programmer og færre fejl.

Diskret wavelet-transformation

Den 1D Haar wavelet-transformation af et heltal-power-of-to-længde liste over numre kan gennemføres meget kortfattet i Caml og er et fremragende eksempel på brugen af ​​mønstertilpasning løbet lister, idet par af elementer ud foran og lagring af deres summer og forskelle på listerne s og d, henholdsvis:

For eksempel:

Mønster matchning tillader komplicerede transformationer at være repræsenteret klart og kortfattet. Desuden OCaml compiler forvandler mønster matcher til meget effektiv kode, til tider resulterer i programmer, der er kortere og hurtigere end tilsvarende kode skrevet med en sag erklæring.

  0   0
Forrige artikel Bogoljub Karic
Næste artikel Diadophis punctatus arnyi

Kommentarer - 0

Ingen kommentar

Tilføj en kommentar

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Tegn tilbage: 3000
captcha