Un punct fix al unei funcții se numește o valoare astfel încât. De exemplu, valorile sunt puncte fixe și funcționează ca ambele. Întrucât punctul fix al funcțiilor de ordinul întâi (de exemplu, funcțiile pe valorile „obișnuite“, cum ar fi numere întregi) este o primă valoare pentru funcțiile de ordin superior ale punctelor fixe sunt celelalte funcții, care este, în cazul în care - punctul fix (ea însăși o funcție) funcție. Luând în considerare acest lucru, un punct fix numit combinator o caracteristică specială:
combinatoare punct fix vă permite să definiți un funcții recursive anonime. Un pic surprinzător este faptul că astfel de intriganți ele însele pot fi determinate folosind nerecursive X-abstracțiuni.
Una dintre cele mai faimoase (și, probabil, cel mai simplu) punct fix Combinator în netipizat λ-calcul se numește Y Combinator. Acesta a fost dezvoltat de Haskell Curry și este definită după cum urmează:
Trebuie remarcat faptul că Y Combinatorul pentru utilizare cu o strategie de calculator „apel prin nume“, deoarece expresia (YG) bucle pentru arbitrare strategie g „apel prin valoare“.
punct fix uneltitor într-o limbi stricte și non-stricte [modifică]
In unele procese de calcul matematice formalism care descrie (de exemplu λ-calcul sau logica combinatorie), fiecare expresie poate fi considerată ca funcții de ordin superior. Acestea punct fix formalisme existența Combinator implică faptul că fiecare element are cel puțin un punct fix. Dar, în aceeași funcție poate avea mai multe puncte fixe diferite.
În alte sisteme, cum ar fi pur și simplu tastat λ-calcul. bine tastat uneltitor punct fix nu poate fi construit. În astfel de sisteme, orice recursie sprijin trebuie să fie specificat în mod explicit în notație. În alte sisteme, cum ar fi pur și simplu tastat λ-calcul cu tipuri de recursive adăugate. combinatoare punct fix poate fi construit, dar tipul de combinatoare „utile“ (de exemplu, utilizarea de care se întoarce întotdeauna) poate fi interzisă.
De exemplu, în limbajul de programare Standard ML varianta Combinator Y pentru a apela tip are semnificativ ∀a.∀b. ((A → b) → (a → b)) → (a → b), în timp ce opțiunea de a solicita denumirea tipului ∀a. (a → a) → a. Opțiunea de a apela în numele bucle atunci când sunt utilizate în limbi stricte. YF deoarece orice utilizare are loc întotdeauna în f (YF). În plus, argumentul se calculează funcția externă f. deoarece este necesar de o valoare strategie apel, iar valoarea obținută f (f (Yf)). Acest proces va continua pe termen nelimitat, dar valoarea acestei aplicații este primită nu va fi niciodată.
EXEMPLU [citare]
Luați în considerare pentru a calcula funcția factorial (în notație A. Bisericii). Medie definiție matematică recursiv este următoarea:
Puteți vedea un alt pas în calcularea acestei notație recursie λ-calcul:
F = λf.λx. (ISZERO x) 1 (x MULT (f (PRED x)))
în care «f» - parametru pentru funcția factorial. Funcția F calculează un pas recursie în formula de mai sus. Atunci când este aplicat la un punct fix Combinator remediați obține următoarea secvență de declarații:
Alte aplicatii pot fi redenumite fix (F), de fapt. ci pentru că:
fapt (n) = (ISZERO n) 1 (n MULT (fapt (PRED n)))
Astfel, este clar că un punct fix combinator convertește efectiv funcția non-recursivă care calculează un pas recursie, o funcție recursivă care satisface formula de mai sus-menționat.
Alte combinatoare punct fix [regula]
Versiunea Combinator Y. care poate fi utilizat în apel cu valoare (determinată prin utilizarea η-reducere):
Y Combinatorul poate fi exprimată în baza SKI combinatoriale dupa cum urmeaza:
Cel mai simplu (care necesită cel mai mic număr de combinatoare bază de expansiune într-o bază) în punct fix bază combinator SK. D. Tromp găsite:
Această intrare corespunde următoarei λ-expresie.
Un alt punct fix combinator găsit Turing.
Acest combinator au, de asemenea, un formular simplu pentru apelul de valoare:
combinatoare punct fix nu sunt la fel de rare (acestea sunt, în general, există infinit de multe). Unele dintre acestea sunt folosite ca divertisment (termenul L este găsit în ea de 26 de ori):