-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoddeven126.pro
21 lines (16 loc) · 991 Bytes
/
oddeven126.pro
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* Получить в бесповторном списке X слова из L1 входящие в L2 чётное число раз, а
в бесповторном списке Y -- нечётное число раз.
*/
odd_occ( [X|L], X ) :- !, even_occ( L, X ).
odd_occ( [X], X ).
odd_occ( [_|L], X ) :- odd_occ( L, X ).
even_occ( [X|L], X ) :- !, odd_occ( L, X ).
even_occ( [], _ ).
even_occ( [_|L], X ) :- even_occ( L, X ).
b_odd_even_occ( [X|Tail], Text, [X|TailOdd], TailEven ) :- odd_occ( Text, X ), !, b_odd_even_occ( Tail, Text, TailOdd, TailEven ).
b_odd_even_occ( [X|Tail], Text, TailOdd, [X|TailEven] ) :- b_odd_even_occ( Tail, Text, TailOdd, TailEven ).
b_odd_even_occ( [], _, [], [] ).
b_unique( [X|Tail], Tailres ) :- member( X, Tail ), !, b_unique( Tail, Tailres ).
b_unique( [X|Tail], [X|Tailres] ) :- b_unique( Tail, Tailres ).
b_unique( [], [] ).
g( L1, L2, X, Y ) :- b_odd_even_occ( L1, L2, OddOcc, EvenOcc ), b_unique( OddOcc, Y ), b_unique( EvenOcc, X ).