Next: scheme overview data, Previous: scheme overview assignment, Up: scheme overview [Index]
Many of the special forms specified in this report can be translated
into more basic special forms. For example, a let
expression can
be translated into a procedure call and a lambda
expression. The
following two expressions are equivalent:
(let ((x 23) (y 42)) (+ x y)) ⇒ 65 ((lambda (x y) (+ x y)) 23 42) ⇒ 65
Special forms like let
expressions are called derived forms
because their semantics can be derived from that of other kinds of forms
by a syntactic transformation. Some procedure definitions are also
derived forms. The following two definitions are equivalent:
(define (f x) (+ x 42)) (define f (lambda (x) (+ x 42)))
In Scheme, it is possible for a program to create its own derived forms by binding syntactic keywords to macros:
(define-syntax def (syntax-rules () ((def f (p ...) body) (define (f p ...) body)))) (def f (x) (+ x 42))
The define-syntax
construct specifies that a parenthesized
structure matching the pattern (def f (p ...) body)
, where
‘f’, ‘p’, and ‘body’ are pattern variables, is translated
to (define (f p ...) body)
. Thus, the ‘def’ form appearing
in the example gets translated to:
(define (f x) (+ x 42))
The ability to create new syntactic keywords makes Scheme extremely flexible and expressive, allowing many of the features built into other languages to be derived forms in Scheme.