Skip to content

Instantly share code, notes, and snippets.

View DonaldKellett's full-sized avatar

Donald Sebastian Leung DonaldKellett

View GitHub Profile
@DonaldKellett
DonaldKellett / lpn-5-practical-3.pl
Created December 22, 2018 17:07
Learn Prolog Now! - Chapter 5 - Practical Session - Programming Exercise 3 - Dot product of 2 vectors
dot([], [], 0).
dot([X | V1], [Y | V2], Z) :- dot(V1, V2, Result), Z is X * Y + Result.
@DonaldKellett
DonaldKellett / lpn-6-6p1.pl
Created December 23, 2018 05:08
Learn Prolog Now! - Chapter 6 - Exercise 6.1 - Doubled List
doubled(List) :- append(L, L, List).
@DonaldKellett
DonaldKellett / lpn-6-6p2.pl
Created December 23, 2018 05:24
Learn Prolog Now! - Chapter 6 - Exercise 6.2 - Is Palindrome?
palindrome(Result) :-
append(L0, L1, Result), reverse(L0, L1);
append(L0, [_ | L1], Result), reverse(L0, L1).
@DonaldKellett
DonaldKellett / lpn-6-6p3.pl
Created December 23, 2018 05:34
Learn Prolog Now! - Chapter 6 - Exercise 6.3 - Remove first and last element
toptail([_ | T], OutList) :- append(OutList, [_], T).
@DonaldKellett
DonaldKellett / lpn-6-6p4p1.pl
Created December 23, 2018 05:43
Learn Prolog Now! - Chapter 6 - Exercise 6.4.1 - Last element of a list using reverse
last(List, X) :- reverse([X | _], List).
@DonaldKellett
DonaldKellett / lpn-6-6p4p2.pl
Created December 23, 2018 05:47
Learn Prolog Now! - Chapter 6 - Exercise 6.4.2 - Last element of a list using recursion
last([X], X).
last([_ | T], X) :- last(T, X).
@DonaldKellett
DonaldKellett / lpn-6-6p5.pl
Created December 23, 2018 05:55
Learn Prolog Now! - Chapter 6 - Exercise 6.5 - Swap first and last element
swapfl(List1, List2) :- append([A | M], [B], List1), append([B | M], [A], List2).
@DonaldKellett
DonaldKellett / lpn-6-6p6.pl
Created December 23, 2018 11:22
Learn Prolog Now! - Chapter 6 - Exercise 6.6 - Who owns the zebra? (Simplified version of Einstein's Riddle)
% Learn Prolog Now! - Chapter 6 - Exercise 6.6 - Who owns the zebra?
% A simplified version of Einstein's Riddle
% Problem Statement:
% There is a street with three neighboring houses that all have a different color, namely red, blue and green. People of different nationalities live in the different houses and they all have a different pet. Here are some more facts about them:
% - The Englishman lives in the red house
% - The jaguar is the pet of the Spanish family
% - The Japanese lives to the right of the snail keeper
% - The snail keeper lives to the left of the blue house
% Who keeps the zebra? zebra/1 should tell us who this person is.
@DonaldKellett
DonaldKellett / lpn-6-practical-1.pl
Created December 23, 2018 14:00
Learn Prolog Now! - Chapter 6 - Practical Session - Programming Exercise 1 - member/2 using append/3
member(X, List) :- append(_, [X | _], List).
@DonaldKellett
DonaldKellett / lpn-6-practical-2.pl
Created December 23, 2018 14:38
Learn Prolog Now! - Chapter 6 - Practical Session - Programming Exercise 2 - Create a set from a list
% set_accum/3 - A helper function using an acculumator to form a set from a given list
set_accum([H | T], Acc, Result) :- member(H, Acc), set_accum(T, Acc, Result).
set_accum([H | T], Acc, Result) :- \+ member(H, Acc), set_accum(T, [H | Acc], Result).
set_accum([], Acc, Acc).
% set/2 - Create a set of elements from a list
set(InList, OutList) :- set_accum(InList, [], Intermediate), reverse(Intermediate, OutList).