Мы называем предикатами процедуры, которые возвращают логическое значение. Имена этих процедур по традиции заканчиваются знаком вопроса:
(define (Pifagor? a b c)
(= (+ (* a a) (* b b)) (* c c)))
Pifagor? проверяет, является ли тройка чисел сторонами прямоугольного треугольника и возвращает одно из двух значений:
§ #t - истина
§ #f – ложь
Процедуры lambda
В том случае, если нужна процедура для однократно выполняемого действия, то нет смысла давать ей имя. Необходимо воспользоваться механизмом определения lambda-функции.
Возведение в квадрат:
(lambda (x) (+ x x))
Для получения 4 можно было написать:
((lambda (x) (+ x x)) 2)
Следующие две строки эквивалентны:
(define (plus4 x) (+ x 4))
(define plus4 (lambda (x) (+ x 4))
Безымянные процедуры
Механизм lambda
§ Существует механизм для создания безымянных процедур:
§ (lambda (параметры) тело) § Такие процедуры создаются, если требуется однократный вызов или процедура возвращается как результат работы другой процедуры.
§ Описание безымянной процедуры и её использование (аппликация):
§ >((lambda (x) (+ x 1)) 4)§ 5 § Безымянные процедуры можно возвращать из других процедур:
§ (define (inc)§ (lambda (x) (+ x 1)))§ § ; применяем inc к параметру 5§ >((inc) 5)§ 6 § Если обычная функция вызывается как
§ (fun x) § То в случае возвращения безымянной функции
§ ((fun) x)
Let