Составители:
Рубрика:
113
Первая попытка удовлетворить правило insert_sort осуществляется с
первым вариантом правила
insert_sort([],[]).
Для удовлетворения правила оба списка должны быть пустыми. Второй ва-
риант правила insert_sort трактует список как комбинацию головы списка и
его хвоста. Внутренние унификационные процедуры Турбо-Пролога пыта-
ются сделать пустым исходный список. Устранение элементов списка на-
чинается с
головы списка и осуществляется рекурсивно.
Та часть правила, которая производит удаление элементов, выглядит
так:
insert_sort([X|Tail],Sorted_list) : - insert_sort(Tail, Sorted_Tail).
По мере того как Турбо-Пролог пытается удовлетворить первое из
правил, происходят рекурсивные вызовы insrt_sort, при этом значениями Х
последовательно становятся все элементы исходного списка, которые затем
помещаются в стек. В результате применения этой процедуры
список ста-
новится нулевым. Теперь первый вариант правила insert_sort производит
обнуление выходного списка, и таким образом правилу придается форма
insert_sort([],[]).
Далее, после того как удовлетворен первый вариант правила
insert_sort, Турбо-Пролог пытается удовлетворить второе правило из тела
insert_sort - правило insert. Переменной Х сначала присваивается первое взя-
тое из стека значение
, 9, а правило insert принимает форму
insert(9,[],[9]).
Теперь удовлетворено и второе правило из тела insert_sort - пра-
вило insert (его второй вариант), поэтому происходит возврат на один круг
рекурсии insert_sort. Из стека извлекается следующий элемент, 3, и испы-
тывается первый вариант insert, а значит и правило упорядочивания
asc_order(X,Y) :- X>Y.
Переменная Х здесь имеет
значение 3, Y - значение 9, само правило
имеет вид
asc_order(3,9) :- 3>9.
Так как оно неуспешно (3 на самом деле не больше, а меньше 9), то
вместе с ним неуспешен и первый вариант insert. При помощи второго
варианта insert 3 вставляется в выходной список слева от 9:
insert(3,[9],[3,9]).
Происходит возврат к insert_sort, теперь оно имеет форму
insert_sort([3,9],[3,9]).
На
следующем круге рекурсии происходит вставка очередного эле-
мента из стека, а именно 7. В начале работы на этом круге правило insert
имеет вид
insert(7,[3,9],_).
Сначала происходит сравнение 7 и 3,
asc_order(7,3):- 7>3.
Так как данное правило успешно, то элемент 3 убирается в стек, и insert
вызывается рекурсивно еще раз, но уже с хвостом списка - [9] :
Первая попытка удовлетворить правило insert_sort осуществляется с первым вариантом правила insert_sort([],[]). Для удовлетворения правила оба списка должны быть пустыми. Второй ва- риант правила insert_sort трактует список как комбинацию головы списка и его хвоста. Внутренние унификационные процедуры Турбо-Пролога пыта- ются сделать пустым исходный список. Устранение элементов списка на- чинается с головы списка и осуществляется рекурсивно. Та часть правила, которая производит удаление элементов, выглядит так: insert_sort([X|Tail],Sorted_list) : - insert_sort(Tail, Sorted_Tail). По мере того как Турбо-Пролог пытается удовлетворить первое из правил, происходят рекурсивные вызовы insrt_sort, при этом значениями Х последовательно становятся все элементы исходного списка, которые затем помещаются в стек. В результате применения этой процедуры список ста- новится нулевым. Теперь первый вариант правила insert_sort производит обнуление выходного списка, и таким образом правилу придается форма insert_sort([],[]). Далее, после того как удовлетворен первый вариант правила insert_sort, Турбо-Пролог пытается удовлетворить второе правило из тела insert_sort - правило insert. Переменной Х сначала присваивается первое взя- тое из стека значение, 9, а правило insert принимает форму insert(9,[],[9]). Теперь удовлетворено и второе правило из тела insert_sort - пра- вило insert (его второй вариант), поэтому происходит возврат на один круг рекурсии insert_sort. Из стека извлекается следующий элемент, 3, и испы- тывается первый вариант insert, а значит и правило упорядочивания asc_order(X,Y) :- X>Y. Переменная Х здесь имеет значение 3, Y - значение 9, само правило имеет вид asc_order(3,9) :- 3>9. Так как оно неуспешно (3 на самом деле не больше, а меньше 9), то вместе с ним неуспешен и первый вариант insert. При помощи второго варианта insert 3 вставляется в выходной список слева от 9: insert(3,[9],[3,9]). Происходит возврат к insert_sort, теперь оно имеет форму insert_sort([3,9],[3,9]). На следующем круге рекурсии происходит вставка очередного эле- мента из стека, а именно 7. В начале работы на этом круге правило insert имеет вид insert(7,[3,9],_). Сначала происходит сравнение 7 и 3, asc_order(7,3):- 7>3. Так как данное правило успешно, то элемент 3 убирается в стек, и insert вызывается рекурсивно еще раз, но уже с хвостом списка - [9] : 113
Страницы
- « первая
- ‹ предыдущая
- …
- 111
- 112
- 113
- 114
- 115
- …
- следующая ›
- последняя »