簡體   English   中英

方案R5RS:定義let表達式

[英]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.

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