Toggle navigation
?
users online
Logout
Open hangout
Open chat for current file
% Class 3 member(H, [H | _]). member(X, [_ | T]) :- member(X, T). concatenate([], L, L). concatenate([H | T1], T2, [H | T3]) :- concatenate(T1, T2, T3). member_concat(X, L) :- concatenate(_, [X | _], L). add_first(X, L, [X | L]). delete_element(H, [H | T], T). delete_element(X, [H | T1], [H | T2]) :- delete_element(X, T1, T2). delete_all_occurence(X, [X], []). delete_all_occurence(H, [H | T1], T2) :- delete_all_occurence(H, T1, T2). delete_all_occurence(X, [H | T1], [H | T2]) :- delete_all_occurence(X, T1, T2). % Class 4 last_member([X], X). last_member([_ | T], X) :- last_member(T, X). last_member_concat(L, X) :- concatenate(_, [X], L). insert_all_positions([], X, [X]). insert_all_positions([H | T1], X, [X, H | T2]) :- insert_all_positions(T1, X, T2). reverse([], []). reverse([X], [X]). reverse([H | T1], L) :- reverse(T1, T2), concatenate(T2, [H], L). palindrome(L) :- reverse(L, L). % Class 5 double_header([H | [H | _]]). double_tone([]). double_tone([_]). double_tone([_ | [_ | [_ | _]]]). same_length([], []). same_length([_ | T1], [_ | T2]) :- same_length(T1, T2). is_whole(0). is_whole(s(X)) :- is_whole(X). is_even(0). is_even(s(s(X))) :- is_even(X). is_odd(s(0)). is_odd(s(s(X))) :- is_odd(X). is_multiple_3(s(s(s(0)))). is_multiple_3(s(s(s(X)))) :- is_multiple_3(X). %Class 6 even_length([]). even_length([_, _ | T]) :- even_length(T). odd_length([_]). odd_length([_, _ | T]) :- odd_length(T). size([], 0). size([_ | T], S) :- size(T, S1), S is S1 + 1. prefix(L, P) :- concatenate(P, _, L). suffix(L, S) :- concatenate(_, S, L). sublist(L, S) :- prefix(L, P), suffix(L, S1), concatenate(P, S, L1), concatenate(L1, S1, L). %Class 7 min(X, Y, X) :- X =< Y. min(X, Y, Y) :- X > Y. max(X, Y, X) :- X >= Y. max(X, Y, Y) :- X < Y. max_cut(X, Y, X) :- X >= Y, !. max_cut(_, Y, Y). member_cut(H, [H | _]) :- !. member_cut(X, [_ | T]) :- member_cut(X, T). gcd(X, 0, X) :- !. gcd(X, Y, Z) :- M is mod(X, Y), gcd(Y, M, Z). ack(0, N, s(N)). ack(s(M), 0, R) :- ack(M, 1, R). ack(s(M), s(N), R) :- ack(s(M), N, R1), ack(M, R1, R). %Class 8 subset([], _). subset([H | T], S) :- member_cut(H, S), subset(T, S). union([], L, L). union([H | T1], L, T2) :- member_cut(H, L), !, union(T1, L, T2). union([H | T1], L, [H | T2]) :- union(T1, L, T2). intersection([], _, []). intersection([H | T1], L, [H | T2]) :- member_cut(H, L), !, intersection(T1, L, T2). intersection([_ | T1], L, T2) :- intersection(T1, L, T2). is_natural(s(0)). is_natural(s(X)) :- is_natural(X). is_less_than(0, X) :- is_natural(X). is_less_than(s(X), s(Y)) :- is_less_than(X, Y). sum(0, X, X). sum(s(X), Y, s(S)) :- sum(X, Y, S). difference(X, 0, X). difference(X, Y, D) :- sum(Y, D, X). times(0, _, 0). times(s(X), Y, M) :- times(X, Y, XY), sum(XY, Y, M). division(X, Y, D) :- times(D, Y, X). divides(X, Y) :- times(Y, _, X). modulo(X, X, 0). modulo(X, Y, X) :- is_less_than(X, Y), !. modulo(X, Y, M) :- difference(X, Y, D), modulo(D, Y, M). noattack(_, []). noattack(X/Y, [X1/Y1 | T]) :- Y1 =\= Y, (Y1 - Y) =\= (X1 - X), (Y1 - Y) =\= (X - X1), noattack(X/Y, T). solution([]). solution([X/Y | T]) :- solution(T), member(Y, [1, 2, 3, 4, 5, 6, 7, 8]), noattack(X/Y, T). template([1/_, 2/_, 3/_, 4/_, 5/_, 6/_, 7/_, 8/_]).