2013-02-18 10 views
6

W schemacie, który jest funkcjonalnym językiem programowania, nie ma instrukcji przypisania. Ale w let rachunkuSchemat let statement

(let ((x 2)) 
    (+ x 3)) 

przypisywanych 2 do x, więc dlaczego nie ten narusza zasadę, że nie ma instrukcje przypisania w programowaniu funkcjonalnym?

Odpowiedz

11

Oświadczenie "Schemat będący funkcjonalnym językiem programowania" jest nieprawidłowe. W Schemacie zachęca się do programowania funkcjonalnego, ale nie wymuszonego. W rzeczywistości, można użyć set! (instrukcji przypisania!) Do modyfikowania wartości dowolnej zmiennej:

(define x 10) 
(set! x (+ x 3)) 
x 
=> 13 

odniesieniu do oświadczenia pytanie let pamiętać, że wyrażenie takie jak ten:

(let ((x 10)) 
    (+ x 3)) 
=> 13 

... to po prostu cukier syntaktyczny, a pod maską to realizowane tak:

((lambda (x) 
    (+ x 3)) 
10) 
=> 13 

zauważyć, że let wykonuje jednorazowe single assignments na jego zmiennych, więc nie narusza żadnych czysto funkcjonalnego zasadę programowania per se, puszki być potwierdzone z let ekspresji następujący:

Ocenę wyrażeniu nie ma efektem ubocznym, jeżeli nie zmienia się zaobserwować stan maszyny i produkuje te same wartości dla samego wejścia

Ponadto, cytując z Wikipedii:

Nieczytelne języki funkcjonalne zapewniają zarówno pojedyncze przypisanie, jak i prawdziwe przypisanie (chociaż prawdziwe przypisanie jest zwykle używane z mniejszą częstotliwością niż w imperatywnych językach programowania). Na przykład, na schemacie, zarówno dla pojedynczego, przypisania (z let) i prawdziwej przypisania (z set!) może być stosowany do wszystkich zmiennych i wyspecjalizowanych prymitywów przewidziane wewnątrz niszczącej aktualizacji listy, wektory, łańcuchów itp

+1

język programowania funkcjonalnego zachęca i oferuje funkcje, ale niekoniecznie wymusza programowanie funkcjonalne. – ThePiercingPrince