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




Функции. Базовые функции - часть 4


/p>

Функция CAR.

  • Первый элемент списка - голова.
  • Список без головы - хвост.

  •  

     

     

    Функция CAR возвращает в качестве значения первый элемент списка, т.е. голову.

     

     

     

    CAR < список >

    * ( car '(( head ) tail )) -> ( head )

    * ( car ( a b ))

    ошибка - имя несуществующей функции.

    car применяется только для списков, т.е. если есть голова списка.

     

    * ( car nil )

    nil

    * ( car ' nil )

    nil

    * ( car ' ( nil a ) )

    nil

     

     

    Функция CDR.

    * (cdr ' ( a ) )

    nil

    * ( cdr nil )

    nil

    Так как список из одного элемента ,его хвост - пустой список.

    Для

    атомов

    * ( cdr ' kat ) ошибка, т.к. не список.

    * ( cdr ' ( ( a b) ( c d ) ) )

    ( ( c d ) )

    Имена функций и возникли по историческим причинам. Автор Лиспа реализовывал свою первую систему на машине IBM 605. Для хранения адреса головы списка

    использовался регистр CAR (content of address registr) Для хранения адреса хвоста списка использовался регистр CDR (contеnt of decrement registr)

    В MCL можно наряду с CAR и CDR использовать имена FIRST REST.

    * ( FIRST ' ( a b c ) )

    a

     

     

     

    * ( FIRST ( REST ' ( 1 2 3 4 ) )

    2

    * ( FERST ' ( REST ' ( 1 2 3 4 ) ) )

    REST

     

     

     

    Рассмотрим ( сar ( cdr ' ( ( a b ) c d ) ) )

    Первым выполняется cdr ,а затем car,

    т.е. в Лиспе первым выполняются внутренние функции, а затем внешние.

    Исполнение идет "изнутри наружу".

     

     

     

    Функция CONS.

    Функция CONS строит новый список из своих аргументов.

    cons: s-выражение + список = список

     

     

    CONS < s-выражение > <список >

    Примеры:

    * ( cons ' a ' ( b c ) )

    ( a b c )

    * ( cons ' ( a b ) ' ( c d ) )

    ( ( a b) c d )

     

     

    Первый аргумент становится головой второго аргумента, который обязательно является списком.

    * ( cons ' ( a b ) ' ( ( a b ) ) )

    ( ( a b ) ( a b ) )

    * (cons ( + 1 2 ) ' ( + 3 4 ) )

    ( 3 + 3 4 )

    * (cons ' ( + 1 2 ) ( + 3 4 ) )

    error

    * ( cons ' ( + 1 2 ) ' ( + 3 4 ) )

    ( ( + 1 2 ) + 3 4 )

     

     

    <




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