Составители:
Рубрика:
22
CLAUSES
summa_sp([],0).
summa_sp([H|T],S):-summa_sp(T,S1),S= H +S1.
Рассмотрим операцию слияния двух списков.
Пусть L1 и L2 – две переменные, представляющие входные списки.
L3 – выходной список, получаемый слиянием L1 и L2.
append([ ],L,L).
append( [N|L1], L2, [N|L3] ):- append(L1, L2, L3).
Первый вариант этого правила выполняется когда первый список
пустой, второй работает в остальных случаях.
Рассмотрим использование этого предиката при следующем вызове:
append([1,2,3], [4,5],_).
Здесь первый вариант правила сначала не работает, так как первый
список не пустой.
Начинает работать второе правило, так как третий список пустой, к
нему не применима операция деления на голову и хвост. Что касается
первого списка, то он в процессе рекурсивных вызовов претерпевает
деления на голову и хвост, и в конце концов становится пустым (его
элементы попадают в стек)
append([ ],[4,5],_).
После этого срабатывает первый вариант правила, и третий список
инициализируется вторым:
append([ ],[4,5], [4,5]).
И, наконец, чтобы завершить рекурсивные вызовы, ПРОЛОГ извле-
кает из стека (в обратном порядке) элементы первого списка и возвра-
щает их, в соответствии с описанием второго варианта правила, в списки
1 и 3:
append([1,2,3], [4,5],[1,2,3,4,5]).
Рассмотрим, как используются списки и механизм рекурсии при ре-
шении известной задачи о мужике, волке, козе и капусте.
Страницы
- « первая
- ‹ предыдущая
- …
- 22
- 23
- 24
- 25
- 26
- …
- следующая ›
- последняя »