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

Еще об изменении списков

Конечно, не всегда нужно заменять каждый элемент. Далее следует

программа, которая просматривает список из чисел и делает из него копию,

отбрасывая отрицательные числа.

/* Программа CH08EX05.PRO - Просмотр списка чисел, отбрасы-

вание отрицательных*/

domains

list = integer*

predicates

discsrd_negatives(list, list)

clauses

discsrd_negatives([], []).

discsrd_negatives([H|T], ProcessedTail) :-

/* если H отрицательно, то пропустить*/

H < 0,

!,

discsrd_negatives(T, ProcessedTail).

discsrd_negatives([H|T], [H|ProcessedTail]) :-

discsrd_negatives(T, ProcessedTail).

К примеру, целевое утверждение

discsrd_negatives([2, -45, 3, 468], X)

присвоит X=[2, 3, 468].

Далее приведем предикат, который копирует элементы списка, заставляя

каждый элемент появляться дважды:

doubletalk([], []).

doubletalk([H|T], [H, H|DoubledTail]) :-

doubletalk(T, DubledTail).