Rent funktionel programmering - Purely functional programming
I datalogi , rent funktionelt programmering normalt betegner en programmeringsparadigme -a stil med at opbygge strukturen og elementer af edb-programmer, det behandler alle beregninger som evalueringen af matematiske funktioner . Rent funktionel programmering kan også defineres ved at forbyde tilstandsændringer og mutable data.
Rent funktionel programmering består i at sikre, at funktioner inde i det funktionelle paradigme kun afhænger af deres argumenter, uanset hvilken global eller lokal stat som helst.
Forskel mellem ren og uren funktionel programmering
Den nøjagtige forskel mellem ren og uren funktionel programmering er et spørgsmål om kontrovers.
Et program siges normalt at være funktionelt, når det bruger nogle begreber om funktionel programmering , såsom førsteklasses funktioner og funktioner i højere orden . En førsteklasses funktion behøver imidlertid ikke at være rent funktionel, da den kan bruge teknikker fra det tvingende paradigme, såsom arrays eller input/output- metoder , der ikke er rent funktionelle programmer. Faktisk var de tidligste programmeringssprog, der blev omtalt som funktionelle, IPL og Lisp , begge "urene" funktionelle sprog efter den nuværende definition.
Rent funktionelle datastrukturer er vedholdende . Persistens er påkrævet for funktionel programmering; uden det kunne den samme beregning returnere forskellige resultater. Funktionel programmering kan bruge vedvarende ikke-rent funktionelle datastrukturer , mens disse datastrukturer ikke må bruges i rent funktionelle programmer.
Egenskaber ved rent funktionel programmering
Strenge versus ikke-strenge evalueringer
Hver evalueringsstrategi, der ender på et rent funktionelt program, giver det samme resultat. Det sikrer især, at programmøren ikke behøver at overveje, i hvilken rækkefølge programmer evalueres, da ivrig evaluering vil give det samme resultat som doven evaluering . Det er dog stadig muligt, at en ivrig evaluering muligvis ikke afsluttes, mens den dovne evaluering af det samme program stopper. En fordel ved dette er, at doven evaluering meget lettere kan implementeres; da alle udtryk vil returnere det samme resultat på ethvert tidspunkt (uanset programtilstand), kan deres evaluering blive forsinket så meget som nødvendigt.
Parallel computing
Rent funktionel programmering forenkler parallel computing, da to rent funktionelle dele af evalueringen aldrig interagerer.
Datastrukturer
Rent funktionelle datastrukturer er ofte repræsenteret på en anden måde end deres tvingende modparter. For eksempel er array med konstant-tid-adgang og opdatering en grundlæggende komponent i de fleste tvingende sprog, og mange tvingende datastrukturer, såsom hashtabel og binær bunke , er baseret på arrays. Arrays kan erstattes af kort eller tilfældig adgangsliste , som indrømmer rent funktionel implementering, men adgangs- og opdateringstiden er logaritmisk . Derfor kan rent funktionelle datastrukturer bruges på sprog, der ikke er funktionelle, men de er muligvis ikke det mest effektive værktøj til rådighed, især hvis vedholdenhed ikke er påkrævet.
Generelt kræver konvertering af et bydende program til et rent funktionelt program også at sikre, at de tidligere muterbare strukturer nu eksplicit returneres fra funktioner, der opdaterer dem, en programstruktur, der kaldes butiksklar stil .
Rent funktionelt sprog
Et rent funktionelt sprog er et sprog, der kun tillader rent funktionel programmering. Rent funktionelle programmer kan dog skrives på sprog, der ikke er rent funktionelle.