Инструменты пользователя

Инструменты сайта


examination:flp:question29

Разветвление вычислений: условные предложения COND,IF, WHEN, UNLESS и CASE в РС – Лиспе.

В обычных языках программирования существуют средства управления вычислительным процессом: организация разветвлений и циклов. В Лиспе для этих целей используются управляющие структуры - предложения (clause). Внешне предложения записываются как вызовы функций: Первый элемент предложения - имя; остальные - аргументы. В результате вычисления предложения получается значение. Отличие от вызова функции в использовании аргументов.

Управляющие структуры делятся на группы. Одна из групп - разветвления вычислений. В нее входят:

  • COND
  • IF
  • WHEN
  • UNLESS

COND

Предложение СOND является основным средством организации разветвления вычислений.

Структура условного предложения : ( COND ( < проверка-1 > < действие-1 > ) ( < проверка-2 > < действие-2 > )

( < проверка-n > < действие-n > ))

В качестве аргументов < проверка > и < действие > могут быть произвольные формы.

Значение COND определяется следующим образом: Выражения < проверка-i >, выполняющие роль предикатов вычисляются последовательно, слева направо, до тех пор, пока не встретится выражение, значением которого не является NIL. Вычисляется результирующее выражение, соответствующее этому предикату, и полученное значение возвращается в качестве значения всего предложения COND. Если истинного значения нет, то значением COND будет NIL. Обычно в качестве последнего условия пишется t, соответствующее ему выражение будет вычислятся в тех случаях, когда ни одно другое условие не выполняется. Последнюю строку можно записать: ( t ' atom ) ) )

Пример: ( функция проверяет тип аргумента)

( defun classify ( arg )
( cond 
( ( null arg ) nil )
( ( list arg ) 'list )
( ( numberp arg ) 'number )
( t 'atom ) )
* ( classify 'a )
atom
* ( classify 5 )
number

Еще один пример:

( defun double1 ( num )
( cond 
( ( numberp num ) ( * num 2 )
( t ' не-число ) )

Эта функция гарантировано удваивает число, отбрасывая не числовые аргументы.

В COND могут отсутствовать результирующие выражения для предикатов, а так же присутствовать несколько действий.

( COND 
( < проверка-1 > ) 
( < проверка-2 > < действие-2 > )
(< проверка-3 > < дейст.-31 > < дейст.-32 > < дейст.-33 >))

Если нет действия - результат значение предиката. Если не одно действие - результат значение последнего аргумента.

Другие условные предложения

СOND наиболее общее условное предложение. Часто пользуются более простыми условными предложениями. ( IF < условие > < то форма > < иначе форма > )

Пример: ( if ( atom x ) 'аtоm 'not - аtom ) Условные предложения WHEN и UNLESS являются часными случаями условного предложения IF: Если условие соблюдается, то выполняются формы. ( WHEN < условие > < форма-1 > < форма-2 > < форма-3 > … )

Если условие не соблюдается, то выполняются формы. ( UNLESS < условие > < форма-1 > < форма-2 > < форма-3 > … )

examination/flp/question29.txt · Последние изменения: 2014/01/15 08:17 (внешнее изменение)