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

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

3 голосов
/ 18 октября 2011

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

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

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

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

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

Ответы [ 4 ]

10 голосов
/ 18 октября 2011

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

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

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

(define-syntax-rule (block E ...) (let () E ...))
3 голосов
/ 18 октября 2011

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

#lang racket
(require racket/block)
(block
 (define x 1)
 (display x))
3 голосов
/ 18 октября 2011

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

(let
    ((x 1))
    (display x))
2 голосов
/ 18 октября 2011
(define-syntax empty-lambda
  (syntax-rules ()
    ((empty-lambda body ...)
      ((lambda () body ...)))))
...