Learn PROLOG with Real Code Examples
Updated Nov 20, 2025
Code Sample Descriptions
1
Prolog Counter Simulation
:- dynamic(count/1).
:- dynamic(isDark/1).
count(0).
isDark(false).
updateUI :-
count(C),
isDark(D),
write('Counter: '), write(C), nl,
write('Theme: '), (D = true -> write('Dark') ; write('Light')), nl.
increment :-
count(C),
C1 is C + 1,
retract(count(C)),
assert(count(C1)),
updateUI.
decrement :-
count(C),
C1 is C - 1,
retract(count(C)),
assert(count(C1)),
updateUI.
toggleTheme :-
isDark(D),
D1 is (D = false -> true ; false),
retract(isDark(D)),
assert(isDark(D1)),
updateUI.
reset :-
retract(count(_)),
assert(count(0)),
updateUI.
% Simulate actions
updateUI,
increment,
increment,
toggleTheme,
decrement,
reset.
Demonstrates a simple counter simulation with theme toggle using Prolog facts and rules.
2
Prolog Simple Addition
add(A,B,Sum) :- Sum is A + B.
% Example
?- add(10,20,S), write(S), nl.
Adds two numbers and prints the result.
3
Prolog Factorial
factorial(0,1).
factorial(N,F) :- N > 0, N1 is N-1, factorial(N1,F1), F is N * F1.
% Example
?- factorial(5,F), write(F), nl.
Calculates factorial using recursion.
4
Prolog Fibonacci Sequence
fib(0,0).
fib(1,1).
fib(N,F) :- N > 1, N1 is N-1, N2 is N-2, fib(N1,F1), fib(N2,F2), F is F1 + F2.
% Example
?- fib(10,F), write(F), nl.
Generates Fibonacci numbers recursively.
5
Prolog Max of Two Numbers
max(A,B,A) :- A >= B.
max(A,B,B) :- B > A.
% Example
?- max(10,20,M), write(M), nl.
Finds the maximum of two numbers.
6
Prolog List Sum
sum_list([],0).
sum_list([H|T],Sum) :- sum_list(T,SumT), Sum is H + SumT.
% Example
?- sum_list([1,2,3,4,5],S), write(S), nl.
Sums elements of a list recursively.
7
Prolog Even Numbers Filter
even(X) :- 0 is X mod 2.
print_even([]).
print_even([H|T]) :- even(H), write(H), nl, print_even(T).
print_even([H|T]) :- \+ even(H), print_even(T).
% Example
?- print_even([1,2,3,4,5]).
Prints even numbers from a list.
8
Prolog Conditional Counter Increment
:- dynamic(count/1).
count(3).
increment_if_less_than_5 :- count(C), C < 5 -> C1 is C + 1, retract(count(C)), assert(count(C1)); true.
% Example
?- increment_if_less_than_5, count(C), write(C), nl.
Increments counter only if less than 5.
9
Prolog Resettable Counter
:- dynamic(count/1).
count(0).
increment :- count(C), C1 is C + 1, retract(count(C)), assert(count(C1)).
reset :- retract(count(_)), assert(count(0)).
% Example
?- increment, increment, count(C), write(C), nl, reset, count(C2), write(C2), nl.
Counter that can increment and reset.
10
Prolog Theme Toggle Only
:- dynamic(isDark/1).
isDark(false).
toggle_theme :- isDark(D), D1 is (D = false -> true ; false), retract(isDark(D)), assert(isDark(D1)).
% Example
?- write('Initial Theme: '), isDark(D), write(D), nl, toggle_theme, isDark(D1), write('Toggled Theme: '), write(D1), nl.
Toggles theme multiple times.