Миоко Таканава
Гений
(51590)
11 лет назад
> произведение списков (не декартово)
Декартово произведение применимо к множествам, значит ваши списки - это множества.
Не декартово произведение множеств - это.. . предполагаю, что это пересечение множеств, так как оно иногда записывается, как арифметическое произведение, без указания символа операции.
Реализацию Пролога тоже не нужно забывать указывать.
Visual Prolog 7:
implement main
open core, console
constants
className = "main".
classVersion = "".
class predicates
intersection:(integer_list, integer_list, integer_list) procedure (i, i, o).
belongs:(integer, integer_list) nondeterm (i, i).
clauses
classInfo(className, classVersion).
clauses
intersection([ ], _, [ ]).
intersection([ H | T1 ], L, [ H | T2 ]) :- belongs(H, L), !,intersection(T1, L, T2).
intersection([ _ | T ], L1, L2) :- intersection(T, L1, L2).
belongs(X, [ X | _ ]).
belongs(X, [ _ | T ]) :- belongs(X, T).
clauses
run():-
init(),
intersection([1, 3, 4, 6, 7, 9], [1, 2, 3, 5, 8, 9], L),
write(L), nl,
_ = readChar().
end implement main
goal
mainExe::run(main::run).
надо найти произведение списков (не декартово)