Главная
»
Информационные системы
»
Представление знаний в ИС
»
Определить предикат можно_составить(L1,L2) – изэлементов списка L1, не используя никакой из них дважды, можносоставить список L2.
Определить предикат можно_составить(L1,L2) – изэлементов списка L1, не используя никакой из них дважды, можносоставить список L2.
Вариант 1 говорит всегда нет, хотя, возможно, некорректные входные данные:
% Bilet4
% Patched 14.01.13
% To start type: jstart.
head(X,[X|L]).
tail(L,[X|L]).
member(X,L):-head(X,L).
member(X,L):-tail(T,L),member(X,T).
delete(X,[X|L],L).
delete(X,[Y|L],[Y|L1]):-delete(X,L,L1).
moshnSost([],L2).
moshnSost([L1|T],L2):-member(L1,L2),delete(L1,L2,L3),moshnSost(T,L3).
jstart:- write(' Vvedite spisok L1: '),nl,read(LJAM1),nl,
write(' Vivod spiska L1= '),
write(LJAM1),nl,
write(' Vvedite spisok L2: '),nl,read(LJAM2),nl,
write(' Vivod spiska L2= '),
write(LJAM2),nl,
moshnSost(LJAM1,LJAM2).
Вариант 2 (работает!):
входные данные:
L1=[1,2,3].
L2=[1,2].
и
L1=[1,2,3,4].
L2=[1,2,2,1].
%20. Определить предикат можно_составить(L1,L2) - из элементов
%списка L1, не используя никакой из них дважды, можно составить список L2.
% Bilet4 Variant 2
% Patched 14.01.13
% To start type: jstart.
perestanovka([],[]).
perestanovka(L,[X|P]):-del_el(X,L,L1),
perestanovka(L1,P).
del_el(X,[X|L],L).
del_el(X,[Y|L],[Y|L1]):-del_el(X,L,L1).
podposled([],[]).
podposled([_|T],X):-podposled(T,X).
podposled([X|R],[X|T]):-podposled(R,T).
podmno_vo([],[]).
podmno_vo([X|T],P):-podposled([X|T],L),
perestanovka(L,P).
sost(L1,L2):-podmno_vo(L1,L2).
jstart:- write(' Vvedite spisok L1: '),nl,read(LJAM1),nl,
write(' Vivod spiska L1= '),
write(LJAM1),nl,
write(' Vvedite spisok L2: '),nl,read(LJAM2),nl,
write(' Vivod spiska L2= '),
write(LJAM2),nl,
sost(LJAM1,LJAM2).
Друзья! Приглашаем вас к обсуждению. Если у вас есть своё мнение, напишите нам в комментарии.