IIMS College: Putalisadak, Kathmandu, Nepal
IIMS College: Putalisadak, Kathmandu, Nepal
IIMS College: Putalisadak, Kathmandu, Nepal
Assignment Title: Give the suitable Prolog query for the following questions__________________________
________________________________________________________________________________
____________________________________________________________________________
-------------------------------------------
Evaluator’s Signature & Date
1. Let's call a list doubled if it is made of two consecutive blocks of elements that are exactly
the same. For example, [a,b,c,a,b,c] is doubled (it's made up of [a,b,c] followed by [a,b,c])
and so is [foo,gubble,foo,gubble]. On the other hand, [foo,gubble,foo] is not doubled. Write
a predicate doubled(List) which succeeds when List is a doubled list.
Ans: CODE:
OUTPUT:
2. A palindrome is a word or phrase that spells the same forwards and backwards. For example,
`rotator', `eve', and `nurses run' are all palindromes. Write a predicate palindrome(List),
which checks whether List is a palindrome. For example, to the queries
?- palindrome([r,o,t,a,t,o,r]).
and
?- palindrome([n,u,r,s,e,s,r,u,n]).
Prolog should respond `yes', but to the query
?- palindrome([n,o,t,h,i,s]).
Prolog should respond `no'.
Ans: CODE:
palindrome(List) :- reverse(List,List).
OUTPUT:
3. Write a predicate second(X,List) which checks whether X is the second element of List.
Ans: CODE:
second(X,[_,X|_]).
OUTPUT:
swap12([X,Y|T],[Y,X|T]).
OUTPUT:
5. Write a predicate final(X,List) which checks whether X is the last element of List.
Ans: CODE:
final(X,List) :- reverse(List,[X|_]).
OUTPUT:
6. Write a predicate toptail(InList,Outlist) which says `no' if inlist is a list containing fewer
than 2 elements, and which deletes the first and the last elements of Inlist and returns the
result as Outlist, when Inlist is a list containing at least 2 elements. For example:
toptail([a],T).
no
toptail([a,b],T).
T=[]
toptail([a,b,c],T).
T=[b]
Hint: here's where append comes in useful.
Ans: CODE:
toptail([_|Xs],Outlist) :- append(Outlist,[_],Xs).
OUTPUT:
7. Write a predicate swapfl(List1,List2) which checks whether List1 is identical to List2,
except that the first and last elements are exchanged. Hint: here's where append comes in
useful again.
Ans: CODE:
swapfl([X|Xs],List2) :-
append(T,[H],Xs),
append([H|T],[X],List2).
OUTPUT: