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 willnot 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).