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




Функции. Базовые функции 2


ЛЕКЦИЯ 3.Функции. Базовые функции.

Содержание

3.1 Определение функций.

Необходимо поместить два элемента в начало списка, причем эту операцию мы хотели бы выполнять несколько раз с различными элементами.

Например :

          * ( cons ' a (cons

          ' b ' ( c d ) ) )

          ( a b c d )

        или

          * ( cons ' train (cons

          ' truck ' (bus car boat ) ) )

          ( train truck bus car boat )


        Лучше, если была бы функция:

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

          ( a b c d )


          * ( cons-two ' train ' truck ' ( bus car boat ) )

          ( train truck bus car boat )

Такую функцию можно определить самим и использовать как встроенную.

    Чтобы определить функцию, необходимо:

  • Дать имя функции

  • Определить параметры функции

  • Определить ,что должна делать функция

Для задания новых функций в Лиспе используется специальная форма

defun.

( defun < имя-функции > < параметры > < тело-функции >)

Для нашего случая:

          ( defun cons-two ( x y oldlist )

          ( cons x ( cons y oldlist ) ) ) )

  • Имя функции - символ.

  • Параметры - список аргументов.

  • Tело функции - вычисляемая форма от аргументов.

Значение определения функции defun - имя функции .

          * ( defun cons-two ( x y oldlist )

          ( cons x ( cons y oldlist ) ) ) )
          CONS-TWO

Вызов функции:

( < имя-функции > < значения аргументов >)

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

          ( a b c d )

Значение функции - значение тела функции при заданных аргументах.

      Примеры:

          * ( defun double ( num ) ( * 2 num ) )

          * ( double 7 )

          14

        Определенную функцию можно использовать как встроенную:

          * ( setq z ( double ( + 5 10 ) ) )

          30


          * ( double z )

          60

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

      Необходимо элемент поместить new на второе место в списке:

      ( a c d ) станет ( a new c d )


Назовем функцию insert-second. Два аргумента: item oldlist.

      Тело функции:

      ( cons ( car oldlist ) ( cons item ( cdr oldlist ) ) )

      Таким образом,определим функцию:

        ( defun insert-second ( item oldlist )

        ( cons ( car oldlist ) ( cons item ( cdr oldlist ) ) )




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