Читаючи знаменитий SICP, я виявив, що автори здаються досить неохоче ввести заяву про призначення в Схему в Розділі 3. Я читаю текст і розумію, чому вони так вважають.
Оскільки схема є першою функціональною мовою програмування, про яку я коли-небудь знаю, я дуже здивований, що деякі функціональні мови програмування (не, звичайно, схема) можуть обійтися без завдань.
Нехай скористається прикладом, який пропонує книга, 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!
чи інших функцій, які закінчуються символом a!
. Після того, як вам це буде комфортно, перехід на чистий FP повинен бути простішим.