logo
TurboProlog / Документация / TOM_1

Определение 3.

singlepeak([],_).

singlepeak([_],_).

singlepeak([U,V|W],up):-

U<V,singlepeak([V|W],up).

singlepeak([U,V|W]):-

U>V,singlepeak([V|W],down).

-----------------------------------------------------------------

Правило 4. Доверяйте больше работы механизму унификации в Турбо

Прологе.

-----------------------------------------------------------------

На первый взгляд, описание предиката equal для проверки равенства

двух списков должно выглядеть следующим образом

equal([],[]).

equal([U|X],[U|Y]):-equal(X,Y).

но в этом нет необходимости. Используйте определение

equal(X,X).

а механизм унификации сделает все остальное !

-----------------------------------------------------------------

Правило 5. Для повторяющихся операций используйте поиск с

возвратом, а не рекурсию.

-----------------------------------------------------------------

Поиск с возвратом позволяет уменьшить размер стека. Задача заключа-

ется в использовании комбинации repeat...fail вместо рекурсии. Этот метод

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

главы.