Harold Abelson and Gerald Jay Sussman with ... - ftp.linux.kiev.ua.
Harold Abelson and Gerald Jay Sussman with ... - ftp.linux.kiev.ua.
Harold Abelson and Gerald Jay Sussman with ... - ftp.linux.kiev.ua.
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
1.1. Элементы программирования 37<br />
Такая конструкция называется разбором случаев (case analysis). В Лиспе существует<br />
особая форма для обозначения такого разбора случаев.Она называется cond<br />
(от английского слова conditional, «условный») и используется так:<br />
(define (abs x)<br />
(cond ((> x 0) x)<br />
((= x 0) 0)<br />
((< x 0) (- x))))<br />
Общая форма условного выражения такова:<br />
(cond (〈p 1 〉 〈e 1 〉)<br />
(〈p 2 〉 〈e 2 〉)<br />
.<br />
(〈pn〉 〈en〉))<br />
Она состоит из символа cond, за которым следуют заключенные в скобки пары<br />
выражений (〈p〉 〈e〉), называемых ветвями (clauses). В каждой из этих пар<br />
первое выражение — предикат (predicate), то есть выражение, значение которого<br />
интерпретируется как истина или ложь 17 .<br />
Условные выражения вычисляются так: сначала вычисляется предикат 〈p 1 〉.<br />
Если его значением является ложь, вычисляется 〈p 2 〉. Если значение 〈p 2 〉 также<br />
ложь, вычисляется 〈p 3 〉. Этот процесс продолжается до тех пор, пока не<br />
найдется предикат, значением которого будет истина, и в этом случае интерпретатор<br />
возвращает значение соответствующего выражения-следствия (consequent<br />
expression) в качестве значения всего условного выражения. Если ни один из 〈p〉<br />
ни окажется истинным, значение условного выражения не определено.<br />
Словом предикат называют процедуры, которые возвращают истину или ложь,<br />
а также выражения, которые имеют значением истину или ложь. Процедура вычисления<br />
модуля использует элементарные предикаты 18 .<br />
Они принимают в качестве аргументов по два числа и, проверив, меньше ли<br />
первое из них второго, равно ему или больше, возвращают в зависимости от этого<br />
истину или ложь.<br />
Можно написать процедуру вычисления модуля и так:<br />
17 «Интерпретируется как истина или ложь» означает следующее: в языке Scheme есть два<br />
выделенных значения, которые обозначаются константами #t и #f. Когда интерпретатор проверяет<br />
значение предиката, он интерпретирует #f как ложь. Любое другое значение считается<br />
истиной. (Таким образом, наличие #t логически не является необходимым, но иметь его удобно.)<br />
В этой книге мы будем использовать имена true и false, которые связаны со значениями<br />
#t и #f, соответственно.<br />
18 Еще она использует операцию «минус» -, которая, когда используется с одним операндом,<br />
как в выражении (- x), обозначает смену знака.