有名なSICPを読んだとき、著者は第3章でSchemeに代入文を導入することにかなり消極的であるように見えました。私はテキストを読み、彼らがそう感じる理由を理解します。
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への移行がより簡単になるはずです。