Strikt funktion
Inom datavetenskap och dataprogrammering sägs en funktion f vara strikt om den, när den appliceras på ett icke-avslutande uttryck, inte heller avslutas. En strikt funktion i programmeringsspråkens denotationssemantik är en funktion f där ) . Entiteten , kallad bottom , betecknar ett uttryck som inte returnerar ett normalvärde, antingen för att det loopar oändligt eller för att det avbryts på grund av ett fel som division med noll. En funktion som inte är strikt kallas icke-strikt . Ett strikt programmeringsspråk är ett där användardefinierade funktioner alltid är strikta.
Intuitivt motsvarar icke-strikta funktioner kontrollstrukturer . Operationellt är en strikt funktion en som alltid utvärderar sitt argument ; en icke-strikt funktion är en som kanske inte utvärderar några av dess argument. Funktioner som har mer än en parameter kan vara strikta eller icke-strikta i varje parameter oberoende av varandra, såväl som gemensamt strikta i flera parametrar samtidigt.
Som ett exempel kan uttrycket if-then-else
för många programmeringsspråk, kallat ?:
i språk inspirerade av C, ses som en funktion av tre parametrar. Den här funktionen är strikt i sin första parameter, eftersom funktionen måste veta om dess första argument utvärderas till sant eller till falskt innan det kan returnera; men det är icke-strikt i sin andra parameter, eftersom (till exempel) if(false, ,1) = 1
, samt icke-strikt i sin tredje parameter, eftersom (till exempel) om (true,2, ) = 2
. Det är dock gemensamt strikt i sin andra och tredje parameter, eftersom if(true, , ) =
och if(false, , ) =
.
I ett icke-strikt funktionellt programmeringsspråk hänvisar strikthetsanalys till vilken algoritm som helst som används för att bevisa strängheten hos en funktion med avseende på ett eller flera av dess argument . Sådana funktioner kan kompileras till en mer effektiv anropskonvention , såsom call by value , utan att ändra innebörden av det omslutande programmet.