Cosa è necessario per implementare un linguaggio funzionale utilizzabile

6

Ho fatto qualche programmazione in uno stile più o meno funzionale, ma non ho mai studiato la pura programmazione funzionale.

Qual è il minimo indispensabile per implementare un linguaggio funzionale?

Per quanto ne so, hai bisogno di:

  • La capacità di definire una funzione
  • La capacità di chiamare una funzione
  • sostituzione dei parametri
  • Un tipo di operazione "if" che può impedire la ricorsione come "?:".
  • Test di operatori o funzioni come "Meno di" o "Uguali"
  • Una libreria principale di funzioni e operatori fondamentali (+ -...)

Ciò implica che NON è necessario:

  • Looping
  • variabili (ad eccezione dei parametri)
  • istruzioni sequenziali

Questo è per un uso matematico molto semplice - probabilmente non implementerò nemmeno la manipolazione delle stringhe.

Implementare un linguaggio come questo ti limiterà in modo significativo in qualche modo che non sto considerando? Principalmente sono preoccupato per la mancanza di istruzioni sequenziali e la capacità di definire variabili, puoi davvero fare a meno di queste funzionalità di programmazione "normali"?

    
posta Bill K 01.03.2011 - 00:58
fonte

1 risposta

11

What is the bare minimum needed to implement a functional language?

A Lambda. È tutto. (Vedi il calcolo lambda .)

Da lì, puoi costruire funzioni per eseguire ogni compito e rappresentare molti valori. Puoi definire nuove (denominate) funzioni con il modulo combinatore Y (PDF), e rappresentano diversi valori (come vero e falso) come funzioni. (Prendendo l'idea all'estremo, puoi rappresentare tutti i valori interi come Numeri di chiesa .)

Non hai nemmeno bisogno di un modulo speciale if . Può essere costruito come una raccolta di funzioni. Esempio JavaScript:

true = function(x,y){ return x; }
false = function(x,y){ return y; }
ifelse = function(x,a,b){ x(a,b)() }
not = function(x){ return x(false,true) }
and = function(x,y){ return x(y,false) }
or = function(x,y){ return x(true,y) }

bool = and(not(true),or(true,false))
ifelse(bool, 
    function(){ alert("true!") }, 
    function(){ alert("false!") }
)

Unlambda è un linguaggio reale che porta questa idea all'estremo logico. Ha un solo tipo (funzioni lambda) e una manciata di speciali forme di convenienza come la funzione di identità, i combinatori K e S e una funzione di stampa (che, ad eccezione della stampa, può essere espressa come una raccolta di lambda ).

    
risposta data 01.03.2011 - 01:52
fonte

Leggi altre domande sui tag