“((lambda () ))” 的简写方式是什么?

3

在Scheme中,是否有一个缩写可以代替((lambda () ))?

例如,可以这样写:

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

我希望您能像这样做一些事情。
(empty-lambda
    (define x 1)
    (display x))
4个回答

10

通常的说法是

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

你当然可以将其转换为快速宏:

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

2
我原以为显而易见的答案是使用 begin,例如:(begin (define x 1) (display x))。结果证明这个想法虽然显而易见,但是是错误的,请参考 https://dev59.com/K3I-5IYBdhLWcg3wxbjv#1683842。 - Shannon Severance

3
为什么不直接?
(let
    ((x 1))
    (display x))

3
Racket提供了block表单,其工作方式如下:
#lang racket
(require racket/block)
(block
 (define x 1)
 (display x))

2
(define-syntax empty-lambda
  (syntax-rules ()
    ((empty-lambda body ...)
      ((lambda () body ...)))))

是的,我知道,但我想要一个内置的东西。谢谢! - Cam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接