簡體   English   中英

The Little Schemer中原始函數的范圍是否不正確?

[英]Is the scope of primitive functions in The Little Schemer incorrect?

考慮以下s表達式:

((lambda (car) (car (quote (a b c)))) cdr)

在我嘗試的大多數方案實現中,這個求值為(bc)因為cdr被傳遞給lambda,lambda命名為car ,優先於car的原始實現。

該小策士提供寫在方案中第10章。這實現返回方案的實施a針對上述表達,這似乎是不正確的我。

很清楚為什么實現的行為如此:原始函數的名稱在這里被視為*const而不是*identifier 不是數字或布爾值的*const呈現為基元,並且最終硬連線實際基元

我相信正確的實現方法是不對原始名稱進行特殊檢測,而是在value函數中創建一個初始表,該表包含將原始名稱映射到實際原始實現的條目。

我的問題是:這是Little Schemer實施計划中的一個錯誤嗎? 這種行為是否在計划中有明確規定,或者在1974年編寫本書時可能沒有明確規定?

這是一個錯誤嗎?

是否存在錯誤的問題是確定解釋器是否應該遵循Scheme作用域規則。 自從你提到1974年以來,它就是第一個方案報告發布的前一年,但許多想法可能是當時寫的,什么是方案是小型口譯員,可能是由具有各種微妙差異的研究生共享的。

小Schemer最初被稱為The Little Lisper,后來在Lisp下工作成為Common Lisp。 當重寫它以遵循Scheme時,他們試圖保留早期的大部分代碼,因此解釋器可能具有與Scheme不同的功能。

RNRS計划報告說的是什么

如果解釋器要符合方案報告,則必須允許綁定以遮蔽頂級綁定。 以下是R5RS報告中有關變量,語法關鍵字和區域的引用

每次提及標識符都指的是建立包含使用的最內部區域的標識符的綁定。 如果沒有綁定其區域包含use的標識符,則use指的是頂級環境中變量的綁定

對於后來的報告,如R6RS中相同部分,頂級將被替換為“在封閉庫或頂級程序頂部定義或導入”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM