[英]Scheme R5RS: defining let expression
我想知道您將如何在Scheme中定義自己的let表達式(我對Scheme非常陌生)。 我希望它看起來像(mylet id expr1 expr2),其中id綁定到expr1的值並在expr2中使用。 我認為這可能與以下內容類似:
(define (mylet x a body)
((lambda (x) body) a) )
但這不起作用。
當我嘗試
(mylet x 4 (* x 4))
我收到以下錯誤:
x: undefined; cannot reference undefined identifier.
我究竟做錯了什么?
let
實際上是一個宏。 您不能將其定義為過程。 由於您使用的是球拍,請嘗試以下操作:
(define-syntax-rule (mylet x a body)
((lambda (x) body) a))
看起來幾乎像您的原始代碼,但是使用define-syntax-rule
而不是define
。 ;-) define-syntax-rule
實際上是以下完整宏的快捷方式:
(define-syntax mylet
(syntax-rules ()
((_ x a body)
((lambda (x) body) a))))
實際上,您甚至可以通過以下方式定義“標准” let
宏(減去名為let
):
(define-syntax-rule (let ((id val) ...) body ...)
((lambda (id ...) body ...) val ...))
請注意省略號( ...
)的使用。 這允許零種或多種形式; 在這種情況下,它可以讓let
含有多種人體形式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.