Czytając słynny SICP, stwierdziłem, że autorzy raczej niechętnie przedstawiają oświadczenie o przypisaniu do Schematu w Rozdziale 3. Czytam tekst i rozumiem, dlaczego tak się czują.
Ponieważ Scheme jest pierwszym funkcjonalnym językiem programowania, o którym coś wiem, jestem trochę zaskoczony, że niektóre funkcjonalne języki programowania (nie oczywiście Scheme) mogą obejść się bez zadań.
Użyjmy przykładu z książki bank account
. Jeśli nie ma instrukcji przypisania, jak można to zrobić? Jak zmienić balance
zmienną? Pytam o to, ponieważ wiem, że istnieje kilka tak zwanych czysto funkcjonalnych języków i zgodnie z pełną teorią Turinga, to też trzeba zrobić.
Nauczyłem się C, Java, Python i często używam zadań w każdym napisanym przeze mnie programie. To naprawdę otwierające oczy doświadczenie. Naprawdę mam nadzieję, że ktoś może krótko wyjaśnić, w jaki sposób unika się zadań w tych funkcjonalnych językach programowania i jaki głęboki wpływ (jeśli w ogóle) ma na te języki.
Powyższy przykład znajduje się tutaj:
(define (make-withdraw balance)
(lambda (amount)
(if (>= balance amount)
(begin (set! balance (- balance amount))
balance)
"Insufficient funds")))
Zmieniło to balance
By set!
. Dla mnie to bardzo przypomina klasową metodę zmiany członka klasy balance
.
Jak powiedziałem, nie znam funkcjonalnych języków programowania, więc jeśli powiedziałem coś złego na ich temat, śmiało to zaznaczam.
set!
lub innych funkcji, które kończą się na!
. Gdy poczujesz się z tym dobrze, przejście na czysty FP powinno być łatwiejsze.