Programming Paradigms Lab 11-Lists and arithmetic in Prolog Solved

30.00 $

Category: Tags: , , , , , ,
Click Category Button to View Your Next Assignment | Homework

You'll get a download link with a: zip solution files instantly, after Payment

Securely Powered by: Secure Checkout

Description

Rate this product

Understanding member Exercise 11.1(a)

Draw the search tree for the query member(3, [X, 3, Y]).

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

Understanding member

Exercise 11.1(b)

Verify your solution to Exercise 11.1(a):
Run the following query in SWISH and hit “Step into” button repeatedly.

?- trace, member(X, [X|_]).

List prefix

Exercise 11.2

Implement a predicate prefix/2 that checks if a given list is a prefix of another list. ?- prefix([1, 2], [1, 2, 3, 4])

true

?- prefix(X, [1, 2, 3])
X = []
X = [1]
X = [1, 2]

X = [1, 2, 3]

Interleaving lists

Exercise 11.3

Implement a predicate interleave/3 that checks if first two lists give the third when interleaved.

?- interleave([1, 2], [a, b], X) X = [1, a, 2, b]

?- interleave([1, 2], [a, b, c], X) X = [1, a, 2, b, c]

?- interleave(X, Y, [1, 2, 3, 4]) X = [1, 3], Y = [2, 4]

Squares

Exercise 11.4

Implement a predicate squares/2 that checks
if the second list is a list of squares of numbers from the first list (in the same order).

?- squares([1, 2, 3, 4], X) X = [1, 4, 9, 16]

Selecting elements from lists

Exercise 11.5

Implement a predicate select/3 that splits a list into its element a list of remaining elements.

?- select([6, 3, 8, 5], X, R) H = 6, R = [3, 8, 5]
H = 3, R = [6, 8, 5]
H = 8, R = [6, 3, 5]

H = 5, R = [6, 3, 8]

Permutations

Exercise 11.6

Implement a predicate anagram/2 that checks whether a list is a permutation of another list.

?- anagram([d,o,r,m,i,t,o,r,y], [d,i,r,t,y, r,o,o,m]) true

?- anagram([1, 2], X) X = [1, 2]
X = [2, 1]

A logic puzzle

Exercise 11.7

There is a street with three neighbouring houses that all have a different colour, namely red, blue, and green. People of different nationalities live in the different houses and they all have a different pet. Here are some more facts about them:

  • ●  The Englishman lives in the red house.
  • ●  The jaguar is the pet of the Spanish family.
  • ●  The Japanese lives to the right of the snail keeper.
  • ●  The snail keeper lives to the left of the blue house.

    Who keeps the zebra? Don’t work it out for yourself:
    define a predicate zebra/1 that tells you the nationality of the owner of the zebra!

    Hint: Think of a representation for the houses and the street.
    Code the four constraints in Prolog. You may find member/2 and sublist/2 useful.

Sorted lists

Exercise 11.8

Implement a predicate sorted/1 that checks if a list is sorted. ?- sorted([6, 3, 8, 5])

false

?- sorted([3, 5, 6, 8]) true

Sorted lists

Exercise 11.9

Implement a predicate sort/2 that checks
if the second list is a sorted version of the first one.

?- sort([6, 3, 8, 5], X) X = [3, 5, 6, 8]

Shuffling both ways

Exercise 11.10 (***)

Examine current implementation of shuffled/2. Explain why it’s not working in one direction. Update the implementation of shuffled/2 to work in both directions:

?- shuffled([1, 2], X) X = [1, 2]
X = [2, 1]

?- shuffled(X, [1, 2]) X = [1, 2]
X = [2, 1]

  • Lab11-klwkr1.zip