В схеме общая форма определения процедуры :
(define (<<em> name > <<em> parameters >) <<em> body >)
где <<em> body > принимает последовательность выражений, разрешающую определения процедур такого типа:
> (define (f) 1 2 3)
> (f)
3
Аналогично, общая форма условного выражения имеет вид:
(cond (<<em> предикат > <<em> последовательный > ) (<<em> предикат > <<em> последовательный >)… (<<em> предикат > <<em> последовательный >))
где <<em> последовательный > в каждом предложении принимает последовательность выражений, допускающих условные выражения такого типа:
> (cond (#t 1 2 3))
3
Но почему я не могу использовать define
в выражении условия условного выражения, например, в теле определения процедуры?
Сравните:
> (define (f) (define x 1) (define y 1) (define z 1) (+ x y z))
> (f)
3
с:
> (cond (#t (define x 1) (define y 1) (define z 1) (+ x y z)))
ERROR on line 1: unexpected define: (define x 1)
Примечание. - Я использую инструмент Chibi-Scheme 0.8.0 ion на MacOS 10.15.2.