Curry (informatică)

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Curry este un limbaj de programare logic-funcțional derivat din Haskell și încă în proces de standardizare. Limba a fost numită în cinstea logicianului american Haskell Curry . Moștenește sintaxa și caracteristicile funcționale ale tatălui, integrând unele componente logice care îi sporesc potențialul expresiv.

În cele ce urmează, sunt raportate doar diferențele față de Haskell.

Nedeterminism

În timp ce în limbaje funcționale (sau chiar imperative) executarea unei funcții returnează o singură valoare precisă (se spune că funcția este deterministă), în Curry o funcție poate returna zero, una sau mai multe valori (este a spus că funcția este nedeterministă). La final, programul returnează nedeterministic toate rezultatele posibile.

De exemplu, având în vedere următorul fragment Haskell,

 listEmpty [] = Adevărat
listEmpty _ = False

executând listEmpty [] returnează True în Haskell, deoarece fiind determinist execută prima expresie capabilă să se unească cu parametrii reali. În execuția Curry returnează atât valori True cât și false .

În practică, când mai multe expresii pot fi unificate cu parametrii actuali (se spune că sunt suprapuse), Curry le execută pe toate. Aceasta este caracteristica care face ca programele scrise în Haskell să fie incompatibile cu Curry.

În acest exemplu simplu, pentru a corecta problema, este necesar să se elimine non-determinismul prin consolidarea argumentelor sau adăugarea de gardieni. De exemplu,

 listEmpty [] = Adevărat
listEmpty ( _ : _ ) = False

Operatorul ?

O altă modalitate de a genera nedeterminism este prin ? . Este zahăr sintactic simplu

 x = 1 ? 2 ? 3

echivalentă cu

 x = 1
x = 2
x = 3

Operatorul este foarte simplu definit cu

 x ? _ = x
_ ? y = y

De exemplu, este posibil să se obțină nedeterministic toate elementele unei liste după cum urmează:

 obține ( x : xs ) = x ? obține xs

Variabile logice

Curry introduce cuvântul cheie gratuit , care vă permite să declarați o variabilă drept „gratuită”. Motorul intern al mașinii abstracte se va ocupa de instanțierea corespunzătoare a acestei variabile, returnând toate soluțiile posibile.

De exemplu z && (y || nu x) unde x, y gratuit returnează toate posibilitățile:

X y rezultat
Adevărat Adevărat Adevărat
Adevărat Fals Fals
Fals Fals

Implementarea utilizează două abordări pentru rezolvarea variabilelor logice: îngustarea și reziduarea .

Constrângeri

Elemente conexe

linkuri externe

Controlul autorității GND ( DE ) 1122372914
Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT