24.03.2015 Views

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.

SHOW MORE
SHOW LESS

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), обозначает смену знака.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!