Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Рекурсия по аргументу, пример

Основные задачи для функционального и логического программирования. | Реализация рекурсивного вызова, функция трассировки в Лиспе | Применяющий функционал Лиспа | Генератор в программировании, понятие вычислительного контекста | Теория Тьюринга, значение для логического программирования. | Сопоставление в логическом программировании | Переменная, конкретизация переменных | Процедура вывода решения, как процедура доказательства теоремы | Определение оператора и его свойства. | Запись списка в виде структуры |


Читайте также:
  1. III. Программа и тестовые примеры
  2. III. Программа и тестовые примеры
  3. III. Программа и тестовые примеры
  4. III. Программа и тестовые примеры
  5. IV. Примеры анализа рекламных сообщений
  6. IV.Индивидуальная работа с учащимися (пример)
  7. Аллах привел в качестве примера о верующих жену

Функция называется рекурсией по аргументу, если ее рекурсивные вызовы определяют результат функции. Рекурсия по аргументу существует в функции, возвращаемое значение которой формирует некоторая не рекурсивная функция, в качестве аргумента которой используется рекурсивный вызов.

Пример: на Лиспе (Функция выделения из списка элемента с заданным номером)

>(defun nth1 (x l); функция возвращает элемент списка l,

; находящийся на позиции х от начала списка

(cond ((null l) nil); если список пустой, то возвратить NIL

((= x 0) (car l))

; если значение позиции х=0, то возвратить голову списка

(t (nth (- x 1) (cdr l))))

; в противном случае вызвать функцию nth1 у

; которой первый аргумент − значение позиции будет

; на единицу меньше, а второй аргумент хвост списка

)

>(nth1 2 ‘(a s d f g)); выделить второй элемент списка

D; нумерация элементов списка начинается с 0

В Эрланге

nth1(_,L) when L==[] -> [];

nth1(X,[H|_]) when X==0 -> H;

nth1(X,[_|T]) -> nth1((X-1),T).

 

2> recc:nth1(2,[a,s,d,f,g]).

D

Рекурсия по значению, пример

Рекурсия по значению определяется в случае, если рекурсивный вызов является выражением, определяющим результат функции.

Пример: на лиспе

>(mem 'a '(b c a d e f))

T

> (defun mem (a list)(cond

((null list) nil);

((eql a (car list)) t);

(t (mem a (cdr list)))

))

На эрланге:

mem (_,[])->false;

mem (x,[x|_])->true;

mem (x,[Y|T))->mem(x,t).

 


Дата добавления: 2015-07-19; просмотров: 97 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Основные примитивы Лиспа для обработки списка.| Косвенная рекурсия, пример

mybiblioteka.su - 2015-2024 год. (0.005 сек.)