aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
es tiešām to izdarīju
es uzrakstīju programmu PROLOGā un tiem, kuriem tas neko neizsaka, paskaidrošu, ka tā toč nav nekāda pastaiga:) ja man kāds vēl ap 21 būtu teicis, ka to izdarīšu... nu tas būtu smieklīgi:) bet kā gadījies, kā ne - pa kādām 6ām nieka stundām tas brīnums ir uzcepts:)
%predikaats nosaka, vai elements nav atrodams sarakstaa
not_member(X,[H|T]) :- X=\=H, not_member(X,T).
not_member(X,[]).
%predikaats nosaka, vai elements ir atrodams sarakstaa
member(A,[A|T]).
member(A,[B|T]) :- member(A,T).
%predikaats pievieno saraksta saakumaa elementu
add_elem(H, T, [H|T]).
%predikaats izvaac vienu elementu no saraksta, ja taads tur sastopams
remove(X,[],[]).
remove(X,[X|T],T).
remove(X,A,A) :- not_member(X,A).
remove(X,[H|T],A) :- member(X,T), remove(X,T,L), add_elem(H,L,A).
%paarbaudei, vai parametri ir korekti
all_are_lists(A,B,C,D,E,F) :- islist(A), islist(B), islist(C), islist(D), islist(E), islist(F).
%paarbauda vai visi saraksta elementi, kas ietilpst sarakstaa A
%ietilpst arii sarakstaa B
all_memb_AB([], A, B).
all_memb_AB([H|T],A,B) :- member(H,A), member(H,B), all_memb_AB(T, A, B).
%paarbauda vai visi saraksta elementi, kas ietilpst sarakstaa A
%neietilpst sarakstaa C
all_memb_not_C([], A, C).
all_memb_not_C([H|T],A,C) :- member(H,A), not_member(H,C), all_memb_not_C(T, A, C).
%paarbauda vai visi saraksta elementi, kas ietilpst sarakstaa A
%ietilpst sarakstos D un E
all_memb_not_DE([],A,D,E).
all_memb_not_DE([H|T],A,D,E) :- not_member(H,E), not_member(H,D), member(H,A), all_memb_not_DE(T,A,D,E).
%paarbauda vai visi saraksta elementi, kas ietilpst sarakstaa A
%ir atrodami sarakstaa tik pat daudz reizhu kaa sarakstaa A
memb_even([], A).
memb_even([H|T], A) :- not_member(H, A), memb_even(T, A).
memb_even([H|T], A) :- member(H, A), remove(H, A, A1), even_count(H, T, A1), memb_even(T, A1).
%paarbauda, vai dotais elements divos sarakstos ir atrodams
%vienaadu skaitu reizhu
even_count(Elem, L1, L2) :- not_member(Elem, L1), not_member(Elem, L2).
even_count(Elem, L1, L2) :- member(Elem, L1), member(Elem, L2), remove(Elem, L1, L3), remove(Elem, L2, L4),even_count(Elem, L3, L4).
%paarbauda vai visi saraksta elementi, kas ietilpst sarakstaa A
%ir atrodami sarakstaa tieshi par viens vairaak reizhu nekaa sarakstaa A
memb_one_more([], A).
memb_one_more([H|T], A) :- not_member(H, A), memb_one_more(T, A).
memb_one_more([H|T], A) :- member(H, A), even_count(H, T, A), remove(H, A, A1), memb_one_more(T, A1).
%galvenais predikaats, kas izpilda uzdevuma prasiibas
%straadaaja elementaars piemeers p([1, 2, 3, 4], [1, 1, 1], [5], [1], [1, 1], [3])
p(A, B, C, D, E, F) :-
all_are_lists(A, B, C, D, E, F),
all_memb_AB(D, A, B),
all_memb_not_C(E, A, C),
all_memb_not_DE(F, A, D, E),
memb_even(D, A),
memb_even(F, A),
memb_one_more(E, A).
P.S. tikko atcerējos, ka šorīt tomēr jāceļas. laimes sajūta saplaka:)
Garastāvoklis: neizmērojams miegs un laime:)
Mūzika The Offspring - Original Prankster