Entry 3390

Lab_3

   

Submitted by anonymous on March 21, 2010 at 3 p.m.
Language: Prolog. Code size: 3.4 KB.

% Лабораторна робота № 3

належить(X, [X|_]).
належить(X, [_|Tail]) :-
	належить(X, Tail).

належить2(X, [X|_]) :-
	!.
належить2(X, [_|Tail]) :-
	належить2(X, Tail).

конк([], L, L).
конк([X|Tail1], L, [X|Tail2]) :-
	конк(Tail1, L, Tail2).

додати(X, L, [X|L]).

видалити(X, [X|Tail], Tail).
видалити(X, [Y|Tail1], [Y|Tail2]) :-
	видалити(X, Tail1, Tail2).

підсписок(S, L) :-
	конк(Temp, _, L),
	конк(_, S, Temp).

обернений([], []).
обернений([X|Tail], L) :-
	обернений(Tail, L1),
	конк(L1, [X], L).

всі_різні([]).
всі_різні([X|Tail]) :-
	not(належить(X, Tail)),
	всі_різні(Tail).

перестановка([], []).
перестановка([X|L], P) :-
	перестановка(L, L1),
	видалити(X, P, L1).

довжина([], 0).
довжина([_|Tail], N) :-
	довжина(Tail, N1),
	N is N1+1.

розділити([], _, [], []).
розділити([X|Tail1], Y, [X|Tail2], Greater) :-
	X<Y,
	!,
	розділити(Tail1, Y, Tail2, Greater).
розділити([X|Tail1], Y, Lesser, [X|Tail3]) :-
	розділити(Tail1, Y, Lesser, Tail3).

сорт([], []).
сорт([X|Tail], Sorted) :-
	розділити(Tail, X, Lesser, Greater),
	сорт(Lesser, LessSorted),
	сорт(Greater, GreatSorted),
	конк(LessSorted, [X|GreatSorted], Sorted).

підмножина([], _).
підмножина([X|Xs], Ys) :-
	належить(X, Ys),
	підмножина(Xs, Ys ).

розмалювати([Country-Neighbours|RestOfMap],Palette) :-
	видалити(Country, Palette, Palette1),
	підмножина(Neighbours, Palette1),
	розмалювати(RestOfMap, Palette).
розмалювати([], _).

% Самостійна робота

замінити(_, _, [], []).
замінити(X, Y, [X|T], [Y|T]).
замінити(X, Y, [H|T1], [H|T2]) :-
	H =\= X,
	замінити(X, Y, T1, T2).

прорахувати([], []).
прорахувати([H|T], [Hr|Tr]) :-
	H > 0,
	Hr is H+1,
	прорахувати(T, Tr).
прорахувати([H|T], [Hr|Tr]) :-
	H < 0,
	Hr is H-1,
	прорахувати(T, Tr).
прорахувати([0|T], [0|Tr]) :-
	прорахувати(T, Tr).

% Лабораторна робота № 4

місця([1, 2, 3]).
сформувати(Petro, Mykola, Oleksiy) :-
	місця(Places),
	видалити(Petro, Places, PlacesRest1),
	видалити(Mykola, PlacesRest1, PlacesRest2),
	видалити(Oleksiy, PlacesRest2, _).
перевірити(Petro, Mykola, _) :-
	not(Petro=2),
	not(Petro=3),
	not(Mykola=3).

сказав(лицар, Sent) :-
	Sent.
сказав(брехун, Sent) :-
	not(Sent).
види([лицар, брехун]).
сформувати2(A, B, C) :-
	види(L),
	належить(A, L),
	належить(B, L),
	належить(C, L).
перевірити2(A, B, C) :-
	сказав(B, сказав(A, A=брехун)),
	сказав(C, B=брехун).

напис1(принцеса, тигр).
напис2(принцеса, тигр).
напис2(тигр, принцеса).
види3([принцеса, тигр]).
сформувати3(First, Second) :-
	види3(L),
	належить(First, L),
	належить(Second, L).
перевірити3(First, Second) :-
	напис1(First, Second),
	not(напис2(First, Second)).
перевірити3(First, Second) :-
	not(напис1(First, Second)),
	напис2(First, Second).

розвязок(P) :-
	перестановка([1,2,3,4,5,6], P),
	безпечна([1,2,3,4,5,6], P).
безпечна([], []).
безпечна([X|Xs], [Y|Ys]) :-
	не_атакує(X, Y, Xs, Ys),
	безпечна(Xs, Ys).
не_атакує(_, _, [], []).
не_атакує(X, Y, [X1|Xs], [Y1|Ys]) :-
	Y =\= Y1,
	Y1-Y =\= X1-X,
	Y1-Y =\= X-X1,
	не_атакує(X, Y, Xs, Ys).

% Самостійна робота

напис1_4(принцеса, _).
напис1_4(_, принцеса).
напис2_4(_, тигр).
види4([принцеса, тигр]).
сформувати4(First, Second) :-
	види4(L),
	належить(First, L),
	належить(Second, L).
перевірити4(First, Second) :-
	напис1_4(First, Second),
	напис2_4(First, Second).
перевірити4(First, Second) :-
	not(напис1_4(First, Second)),
	not(напис2_4(First, Second)).

This snippet took 0.03 seconds to highlight.

Back to the Entry List or Home.

Delete this entry (admin only).