сокращение для ((лямбда ()) )

Есть ли в схеме сокращение для ((лямбда()))

Например, вместо

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

Я хотел бы иметь возможность сделать что-то вроде

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

person Cam    schedule 18.10.2011    source источник


Ответы (4)


Обычная идиома для этого

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

который вы, конечно, можете превратить в быстрый макрос:

(define-syntax-rule (block E ...) (let () E ...))
person Eli Barzilay    schedule 18.10.2011
comment
Я думал, что очевидным ответом будет использование begin, например: (begin (define x 1) (display x)) оказывается очевидным и неправильным, см. stackoverflow.com/questions/1683796/. - person Shannon Severance; 19.10.2011

Почему бы просто не

(let
    ((x 1))
    (display x))
person newacct    schedule 18.10.2011

Racket предоставляет форму block, которая работает следующим образом:

#lang racket
(require racket/block)
(block
 (define x 1)
 (display x))
person Sam Tobin-Hochstadt    schedule 18.10.2011

person    schedule
comment
Да, я это понимаю, но я хотел что-то встроенное. Спасибо хоть! - person Cam; 18.10.2011