CIS 554 -- Prolog Quiz Name __________________________________

1. (2 points) Write a Prolog predicate `last` that you can use to find the last element of a list. It declares that the second parameter is the last element of the list given as the first parameter. The predicate should fail if given an empty list. (Hint: two clauses.)

last([A], A).                     //  last([A | []], A). also works.
last([_ | A], B) :- last(A, B).

2. (1 point) Call your `last` predicate to find the last element in the list `[a, b, c]`.
last([a, b, c], X).

3.  (1 point) What will be the value of `X` after you call your function as `last(X, c)`.  ?
[c]               //  1/2 point for c

4. (1 point) Help the prisoner to escape!
```   dynamic locked/1.    locked(cell_door).    escape :- locked(cell_door), !, write('You are locked in!'), nl, fail.    escape :- write('You are free!'), nl. ```Do it by completing the following clause:``` ```
` `     ` pick_lock :- `retract(locked(cell_door)).
or retract((locked(cell_door))).

5. (1 point) Briefly define the term "homoiconic."

The same syntax is used for both program and data.

6.  (1 point) Turn the following into logical (not Prolog) clause form:
`female(X) ∧ rich(X) ⇒ loves(john, X).`

¬female(X) ∨ ¬rich(X) ∨ loves(john, X)

7.  (1 point) Circle the logical statements that, when turned into clause form, require a Skolem function:

```     ∀x∀y, p(x, y)      ∀x∃y, p(x, y)       ∃x∀y, p(x, y)       ∃x∃y, p(x, y)```
``` ```
8. (1 point) How do you indicate a "commit point" in Prolog?     !

9. (1 point) State the resolution principle.

10. X ∨ some-literals
¬ X ∨ some-other-literals
-------------------------------------
some-literals ∨ some-other-literals