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

Упражнение по трассировке

Загрузите и запустите программу CH10EX04.PRO, которая определяет

предикат intersect так, что он служит для двух целей. Предполагается, что

следующая цель:

intersect(X, List1, List2).

будет успешна, если X связано со списком целых чисел, который является

общим для List1 и List2, так что:

intersect(X, [1, 2, 3], [2, 3, 4, 5])

успешна, если X связано с [2, 3], а

intersect([2, 3], X, [2, 3, 4, 5])

завершается успешно, если X связано с [2, 3]. Для выяснения, почему прог-

рамма не работает должным образом, можно использовать средства трассиров-

ки Турбо Пролога.

/* Программа CH10EX04.PRO -

Определение предиката с двумя целями */

domains

list = integer *

predicates

member (integer,list)

intersect (list,list,list)

clauses

member (X,[X|_]).

member (X,[_|Y] :- member (X,Y).

intersect([],[],_).

intersect([X|Y],[X|L1],L2) :-

member (X,L2),intersect (Y,L1,L2).

intersect(Y,[_|L1],L2) :-

intersect(Y,L1,L2).

/* Эта программа требует исправлений. */