shorthand for ((lambda () ))



scheme中是否有((lambda ()))

的简写?

例如,不用

((lambda ()
    (define x 1)
    (display x)))

我希望能够做一些像

(empty-lambda
    (define x 1)
    (display x))

通常的习惯用法是

(let ()
  (define x 1)
  (display x))

你当然可以把它变成一个快速宏:

(define-syntax-rule (block E ...) (let () E ...))

为什么不直接

(let
    ((x 1))
    (display x))

Racket提供了block表单,其工作原理如下:

#lang racket
(require racket/block)
(block
 (define x 1)
 (display x))
(define-syntax empty-lambda
  (syntax-rules ()
    ((empty-lambda body ...)
      ((lambda () body ...)))))

最新更新