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ć balancezmienną? 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 balanceBy 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.