Читая знаменитый SICP, я обнаружил, что авторы, скорее всего, неохотно представляют инструкцию присваивания Схеме в главе 3. Я читаю текст и понимаю, почему они так думают.
Поскольку Scheme является первым функциональным языком программирования, о котором я когда-либо знаю, я удивлен, что некоторые функциональные языки программирования (конечно, не Scheme) могут обходиться без заданий.
Давайте использовать пример, который предлагает книга, bank account
пример. Если нет оператора присваивания, как это можно сделать? Как изменить balance
переменную? Я спрашиваю об этом, потому что знаю, что существуют некоторые так называемые чисто функциональные языки, и согласно полной теории Тьюринга это тоже можно сделать.
Я изучил C, Java, Python и много использую назначения в каждой написанной мной программе. Так что это действительно открывающий глаза опыт. Я действительно надеюсь, что кто-то вкратце объяснит, как избегать назначений в этих функциональных языках программирования и какое глубокое влияние (если таковое имеется) оно оказывает на эти языки.
Пример, упомянутый выше, здесь:
(define (make-withdraw balance)
(lambda (amount)
(if (>= balance amount)
(begin (set! balance (- balance amount))
balance)
"Insufficient funds")))
Это изменило свой balance
путь set!
. Для меня это очень похоже на метод класса для изменения члена класса balance
.
Как я уже сказал, я не знаком с функциональными языками программирования, поэтому, если я сказал что-то не так о них, не стесняйтесь указывать.
set!
или других функций, заканчивающихся на!
. Как только вы освоитесь с этим, переход на чистый FP должен быть более легким.