Функциональное программирование




Логические функции. Управляющие структуры - часть 3


/p>

      Обычно в качестве последнего условия пишется 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 >))


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

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

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

СOND наиболее общее условное предложение. Часто пользуются более простыми условными предложениями.

    ( IF < условие > < то форма > < иначе форма > )


        Пример:

            ( if ( atom x ) 'аtоm 'not - аtom )

    Условные предложения WHEN и UNLESS являются часными случаями условного предложения IF:

  • Если условие соблюдается, то выполняются формы.

    ( WHEN < условие >

    < форма-1 > < форма-2 > < форма-3 > ... )

    • Если условие не соблюдается, то выполняются формы.

      ( UNLESS < условие >

      < форма-1 > < форма-2 > < форма-3 > ... )


    4.3.3 Связь между COND и логическими функциями.

    Любую логическую функцию можно заменить COND-выражением и наоборот.

    Пример:

    car-функция с проверкой:

      ( defun gcar ( l )

      ( cond

      ( ( listp l ) ( car l ) )

      ( t nil ) ) )

    то же через логические функции:
      ( defun gcar1 ( l )

        ( and

        ( listp l ) ( car l ) ) )

    * (gcar '(a b))




    Содержание  Назад  Вперед