Learn DATALOG with Real Code Examples
Updated Nov 20, 2025
Code Sample Descriptions
1
Datalog Counter and Theme Toggle
% Facts
count(0).
isDark(false).
% Rules
updateUI(Count, Theme) :- count(Count), isDark(IsDark), (IsDark -> Theme = 'Dark'; Theme = 'Light').
increment(NewCount) :- count(Count), NewCount is Count + 1, retract(count(Count)), assert(count(NewCount)).
decrement(NewCount) :- count(Count), NewCount is Count - 1, retract(count(Count)), assert(count(NewCount)).
reset() :- retract(count(_)), assert(count(0)).
toggleTheme() :- isDark(IsDark), NewDark is not IsDark, retract(isDark(IsDark)), assert(isDark(NewDark)).
% Simulate actions
updateUI(Count, Theme).
increment(NewCount).
updateUI(NewCount, Theme).
increment(NewCount2).
updateUI(NewCount2, Theme).
toggleTheme().
updateUI(NewCount2, Theme).
decrement(NewCount3).
updateUI(NewCount3, Theme).
reset().
updateUI(0, Theme).
Demonstrates a simple counter with theme toggling using Datalog facts and rules.
2
Datalog Simple Facts Query
parent(alice, bob).
parent(bob, carol).
ancestor(X,Y) :- parent(X,Y).
ancestor(X,Y) :- parent(X,Z), ancestor(Z,Y).
? ancestor(alice, carol).
Queries simple facts from a Datalog database.
3
Datalog Even Numbers
number(0).
number(N) :- number(M), N is M + 1, N =< 10.
even(N) :- number(N), N mod 2 = 0.
? even(N).
Generates even numbers up to 10.
4
Datalog Factorial
fact(0,1).
fact(N,F) :- N>0, M is N-1, fact(M,F1), F is N*F1.
? fact(5,F).
Calculates factorial using recursive rules.
5
Datalog Fibonacci
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.
? fib(7,F).
Computes Fibonacci numbers using recursion.
6
Datalog Prime Numbers
number(2). number(3). number(4). number(5).
prime(N) :- number(N), not(divisor(X,N)), X<N, X>1.
divisor(X,N) :- N mod X = 0.
? prime(N).
Checks if a number is prime.
7
Datalog List Membership
member(X,[X|_]).
member(X,[_|T]) :- member(X,T).
? member(b,[a,b,c]).
Checks if an element is in a list.
8
Datalog Length of List
length([],0).
length([_|T],L) :- length(T,L1), L is L1+1.
? length([a,b,c,d],L).
Calculates the length of a list.
9
Datalog Maximum Element
max([X],X).
max([H|T],M) :- max(T,M1), M is (H>M1 -> H ; M1).
? max([3,7,2,5],M).
Finds the maximum in a list.
10
Datalog Sum of List
sum([],0).
sum([H|T],S) :- sum(T,S1), S is H+S1.
? sum([1,2,3,4,5],S).
Computes the sum of a list.