Let over Lambda でレキシカル クロージャについて読んだところ、Common Lisp 用に次のコード サンプルが提供されました。
(let ((counter 0))
(lambda () (incf counter)))
これをRacketで次のように書いてみました:
(let ((counter 0))
(lambda() (+ counter 1)))
counter
エラーが発生するため、REPLで呼び出すと:
counter: undefined;
cannot reference an identifier before its definition
私が理解している限りでは、let/set と lambda を混在させると、感覚からの入力によって人間の記憶を処理および変更できるのと同じ方法で、他の関数によって処理できる状態を lambda に保存することができます。LISP プログラムに、他の関数との相互作用によって変更されるコードの一部を含めることに興味があります。これがラムダによって行われなくても、Racket やその他の LISP 方言の重要な部分であるように見えるので、それ (ラムダ関数) を理解したいと思っています。