「TheSeasonedSchemer」の第16章で、作成者は再帰的プロシージャ「depth」を定義します。これは、n個のリストにネストされたピザを返します。たとえば、(depth 3)is(((pizza)))。次に、setを使用して戻り値をキャッシュする「depthM」として改善します。リスト内のNsとRsは、一緒にルックアップテーブルを形成するため、前に見た戻り値に達した場合に、最後まで繰り返す必要はありません。たとえば、すでに計算した場合(depthM 8)、後で計算するときに(depthM 9)、(depthM 0)まで繰り返すのではなく、(depthM 8)の戻り値を検索し、nullに変換します。 。
しかし、その後、プロシージャ内でNとRを移動し、「let」を使用してnullに初期化します。なぜこれは戻り値をキャッシュするという点を完全に打ち負かさないのですか?少し実験したところ、「depthM」を呼び出すたびにNとRが再初期化されているようです。
私は彼らの主張を誤解していますか?
私の質問は本当にこれだと思います:「状態」変数を使ってPerl 5.10でできるように、字句スコープの変数がプロシージャの呼び出しの間に値を保持する方法はありますか?