Сокращение для ((лямбда ()))
Есть ли схема в схеме для ((lambda ()))
Например, вместо
((lambda ()
(define x 1)
(display x)))
Я хотел бы иметь возможность сделать что-то вроде
(empty-lambda
(define x 1)
(display x))
4 ответа
Решение
Обычная идиома для этого
(let ()
(define x 1)
(display x))
который вы, конечно, можете превратить в быстрый макрос:
(define-syntax-rule (block E ...) (let () E ...))
Ракетка обеспечивает block
Форма, которая работает так:
#lang racket
(require racket/block)
(block
(define x 1)
(display x))
(define-syntax empty-lambda
(syntax-rules ()
((empty-lambda body ...)
((lambda () body ...)))))