Bugs Fixed Samples:

Arithmetic mean

area:- write('Radius of a circle = '),

read(R),nl, change from: read(r),nl, variable has to be capitalized at first character
write('Area is '),
A is 3.14*R*R,
write(A),nl,
write('Length of circumference is'),
L is 2*3.14*R,
write(L),nl.

Factorial

fact(0,1).
fact(N,R):-fact(N1,R1),N is N1+1,R is R1*N, !. if the goal is satisfied once,this statement will

not try to satisfy again.

fact1(N,F):-fact1(N,1,F).
fact1(0,F,F).
fact1(N,X,F):- M is N-1, Y is X*N, fact1(M,Y,F), !. change from
fact1(N,X,F):- N is M+1, Y is X*N, fact1(M,Y,F).

Writes the elements of a list

mywrite([]).
mywrite([X|R]):-write(X),nl,mywrite(R). change from mywrite(X),nl,mywrite(R).

Member

mymember(X,[X|_]).
mymember(X,[_|T]):-mymember(X,T).

Counts vowels in a list

vowel(X):-member(X,[a,e,i,o,u]).

nr_vowel([],0).
nr_vowel([X|T],N):-vowel(X),nr_vowel(T,N1),N is N1+1,!.
nr_vowel([X|T],N):-nr_vowel(T,N).

 

Try yourself practise

Exercise(seems the link is not working today, try some time later.)

 

Append

source code:

append([], L, L).

append([X|L1], L2, [X|L3]):-append(L1, L2, L3).

questions:

?-append([a,b,c], [3,2,1], [a,b,c,3,2,1]).

?-append([alpha, beta], [gamma, delta], X).

?-append(X, [b,c,d], [a,b,c,d]).

 

Bicycle Factory

Source code:

basicpart(rim).

basicpart(spoke).

basicpart(rearframe).

basicpart(handles).

basicpart(gears).

basicpart(bolt).

basicpart(nut).

basicpart(fork).

assembly(bike, [wheel, wheel, frame]).

assembly(wheel, [spoke, rim, hub]).

assembly(frame, [rearframe, frontframe]).

assembly(frontframe, [fork, handles]).

assembly(hub, [gears, axle]).

assembly(axle, [bolt, nut]).

partsof(X, [X]):-basicpart(X).

partsof(X, [X]):-assembly(X, Subparts), partsoflist(Subparts, P).

partsoflist([], []).

partsoflist([P|Tail], Total):-partsof(P,Headparts), partsoflist(Tail, Tailparts),

append(Headparts, Tailparts, Total).

Sample questions:

?-partsof(bike,X).

Accumulator

normal code for list length

listlen([], 0).

listlen([H|T], N):-listlen(T, N1), N is N1+1.

code with accumulator

listlen(L, N) :- lenacc(L, 0, N).

lenacc([], A, A).

lenacc([H|T], A, N) :- A1 is A + 1, lenacc(T, A1, N).

questions:

?-listlen([a,b,c,d,e], N)

function called: lenacc([a,b,c,d,e], 0, N)

lenacc([b,c,d,e], 1, N)

lenacc([c,d,e], 2, N)

lenacc([d,e], 3, N)

lenacc([e], 4, N)

lenacc([], 5, N)

 

Bicycle problem with accumulator(rewrite partsoflist functor):

partsof(X,P):-partsacc(X,[],P).

partsacc(X,A,[X|A]) :- basicpart(X).

partsacc(X,A,P) :- assembly(X,Subparts),partsacclist(Subparts,A,P).

partsacclist([],A,A).

partsacclist([P|Tail], A, Total):-partsacc(P,A,Headparts),partsacclist(Tail,Headparts,Total).