0
我給出了對lisp-like語言的遞歸閉包建模的兩種方法的描述。假設我有以下代碼:瞭解編譯器中遞歸閉包的建模
(letrec ((f (fun (l) … (map f l) …)))) …)
對於與f
關閉我能:
- 款待
f
作爲自由變量,並把它放在自己的環境,這導致環閉合。 - 平坦的封閉,環境是封閉的,可以直接重複使用。
我正在使用扁平關閉的概念,它在其第一個單元格中存儲一個指向函數的指針,其餘的自由變量。但我對第二種選擇感到困惑,因爲在我看來,第一個和第二個呼叫接收不同的參數。那麼他們如何獲得相同的閉包,並且不需要將遞歸調用作爲自由變量來區分它們呢?
也許你可以解釋這是如何解決在典型的編譯器的未來步驟?