# Prolog and Clisp programming questions.

## Question 1

We use Prolog for logical coding, computation ( symbolic ). Relations are mentioned here mainly in functional form.

It is worth learning to show how minimal some design could be. It have a great essence in AI.

People using these languages are not major . But we have specialized international expert who work on these rare task and have high skills and trained input to make each project successful and interesting.

% There are two jugs, one holding 3 and the other 5 litres of water.
% A number of things can be done with the jugs: they can be filled, emptied,
% and dumped one into the other either until the poured-into jug is full or until the poured-out-of jug is empty.
% Devise a sequence of actions that will produce 4 litres of water in the larger jug. (Hint: use only integers.)

% —————————————————————————————————————-

fill(K,0,K):- write(‘ Fill ‘), write(K), writeln(‘-liter jug’),!.
fill(_,X,X).
empty(K,K,0):- write(‘ Empty ‘), write(K), writeln(‘-liter jug’),!.
empty(_,X,X).

pour(K1,A,A1,K2,B,K2):- A+B>K2,A1 is A+B-K2,!,
write(‘ Fill ‘), write(K2), write(‘-liter jug from ‘), write(K1), writeln(‘-liter jug’).
pour(K1,A,0,K2,B,B1):- B1 is A+B,!,
write(‘ Pour in ‘), write(K2), write(‘-liter jug from ‘), write(K1), writeln(‘-liter jug’).

main:- find(5,3,4).

find(K1,K2,X):-
find1(K1,0,K2,0,X).

find1(_,X,_,_,X):-!.
find1(K1,A,K2,B,X):-
fill(K1,A,A1),
empty(K2,B,B1),
pour(K1,A1,A2,K2,B1,B2),!,
find1(K1,A2,K2,B2,X).

[/teaser]

## Question 2

;===========================
(printout t ?question)
then
(while (not (member ?answer ?allowed-values)) do
(printout t ?question)
then
)

;========================
; The function prompts the user and allows a response in the form of yes / no
(deffunction yes-or-no-p (?question)
(bind ?response (ask-question ?question yes no y n))
(if (or (eq ?response yes) (eq ?response y))
then
TRUE
else
FALSE)
)
;=========================================================================

(not (repair ?))
=>
(if (yes-or-no-p “Do you prefer the country located far (yes/no)? “)
then
else
)
)

(not (repair ?))
=>
(if (yes-or-no-p “Do you prefer the country located not far away (yes/no)? “)
then
else
)
)

;=========================================================================
(defrule determine-geographical-position_Western_Europ “”
(not (stay in Western Europe ?))
(not (stay in Eastern Europe ?))
(not (stay in Russia ?))
(not (repair ?))
=>
(if (yes-or-no-p “Prefer to stay in Western Europe (yes/no)? “)
then
(assert (stay in Western Europe selected ))
else
(assert (stay in Western Europe not_selected ))
)
)

(defrule determine-geographical-position_Eastern_Europ “”
(stay in Western Europe not_selected)
(not (stay in Eastern Europe ?))
(not (stay in Russia ?))
(not (repair ?))
=>
(if (yes-or-no-p “Prefer to stay in Eastern Europe (yes/no)? “)
then
(assert (stay in Eastern Europe selected ))
else
(assert (stay in Eastern Europe not_selected ))
)
)

(defrule determine-geographical-position_Russia “”
(stay in Western Europe not_selected)
(stay in Eastern Europe not_selected)
(not (stay in Russia ?))
(not (repair ?))
=>
(if (yes-or-no-p “Prefer to stay in Russia (yes/no)? “)
then
(assert (stay in Russia selected ))
else
(assert (stay in Russia not_selected ))
)
)

;=========================================================================
(defrule determine-geographical-position_North_America “”
(not (stay in North America ?))
(not (stay in South-East Asia ?))
(not (stay in South America ?))
(not (stay in Australia ?))
(not (repair ?))
=>
(if (yes-or-no-p “Prefer a vacation in North America (yes/no)? “)
then
(assert (stay in North America selected ))
else
(assert (stay in North America not_selected ))
)
)

(defrule determine-geographical-position_South_East_Asia “”
(stay in North America not_selected)
(not (stay in South-East Asia ?))
(not (stay in South America ?))
(not (stay in Australia ?))
(not (repair ?))
=>
(if (yes-or-no-p “Prefer a vacation in South-East Asia (yes/no)? “)
then
(assert (stay in South-East Asia selected ))
else
(assert (stay in South-East Asia not_selected ))
)
)

(defrule determine-geographical-position_South_America “”
(stay in North America not_selected)
(stay in South-East Asia not_selected)
(not (stay in South America ?))
(not (stay in Australia ?))
(not (repair ?))
=>
(if (yes-or-no-p “Prefer a vacation in South America (yes/no)? “)
then
(assert (stay in South America selected ))
else
(assert (stay in South America not_selected ))
)
)

(defrule determine-geographical-position_Australia “”
(stay in North America not_selected)
(stay in South-East Asia not_selected)
(stay in South America not_selected)
(not (stay in Australia ?))
(not (repair ?))
=>
(if (yes-or-no-p “Prefer a vacation in Australia (yes/no)? “)
then
(assert (stay in Australia selected ))
else
(assert (stay in Australia not_selected ))
)
)

;=========================================================================
(defrule determine-cost_High “”
(not (price high ?))
(not (price average ?))
(not (price small ?))
(not (repair ?))
=>
(if (yes-or-no-p “You can spend on the trip > = 1000\$ (yes/no)? “)
then
(assert (price high selected ))
else
(assert (price high not_selected ))
)
)

(defrule determine-cost_Average “”
(price high not_selected)
(not (price average ?))
(not (price small ?))
(not (repair ?))
=>
(if (yes-or-no-p “You can spend on the trip > 500\$ & < 1000\$ (yes/no)? “)
then
(assert (price average selected ))
else
(assert (price average not_selected ))
)
)

(defrule determine-cost_Small “”
(price high not_selected)
(price average not_selected)
(not (price small ?))
(not (repair ?))
=>
(if (yes-or-no-p “You can spend on the trip <= 500\$ (yes/no)? “)
then
(assert (price small selected ))
else
(assert (price small not_selected ))
)
)

;=========================================================================
(defrule determine-cost_Nature “”
(not (nature ?))
(not (town ?))
(not (repair ?))
=>
(if (yes-or-no-p “You are going to rest on the nature (yes/no)? “)
then
(assert (nature selected ))
else
(assert (nature not_selected ))
)
)

(defrule determine-cost_City “”
(nature not_selected)
(not (town ?))
(not (repair ?))
=>
(if (yes-or-no-p “Are you going to travel around the city (yes/no)? “)
then
(assert (town selected ))
else
(assert (town not_selected ))
)
)

;=========================================================================
(defrule determine-state_1 “”
(stay in Eastern Europe selected)
(price small selected)
(town selected)
(not (repair ?))
=>
(if (yes-or-no-p “You are going to have a rest in the winter at a ski resort (yes/no)? “)
then
(assert (repair “Poland.”))
)
)

(defrule determine-state_2 “”
(stay in Western Europe selected)
(price high selected)
(town selected)
(not (repair ?))
=>
(if (yes-or-no-p “You are going to have a rest in the winter at a ski resort (yes/no)? “)
then
(assert (repair “Switzerland.”))
)
)

(defrule determine-state_3 “”
(stay in North America selected)
(price high selected)
(nature selected)
(not (repair ?))
=>
(if (yes-or-no-p “Do you prefer to relax in the summer sea (yes/no)? “)
then
(if (yes-or-no-p “Do you prefer a vacation on the East Coast (yes/no)? “)
then
(assert (repair “USA, Florida.”))
)
)
)

(defrule determine-state_4 “”
(stay in South America selected)
(price high selected)
(nature selected)
(not (repair ?))
=>

(if (yes-or-no-p “Do you prefer to relax in the summer sea (yes/no)? “)
then
(if (yes-or-no-p “Do you prefer a vacation on the East Coast (yes/no)? “)
then
(assert (repair “Brazil.”))
)
)
)

(defrule determine-state_5 “”
(stay in South-East Asia selected)
(price high selected)
(nature selected)
(not (repair ?))
=>
(if (yes-or-no-p “Do you prefer to relax in the summer sea (yes/no)? “)
then
(assert (repair “Indonesia.”))
)
)

;==========================================================================
; Rule system-banner displays the name of the expert system
; with each new start.
(defrule system-banner “The Turist Expert System ”
(declare (salience 20) )
=> ; with each new start.
(printout t crlf crlf)
(printout t “***************************************************************” crlf)
(printout t “* An expert system for choosing the country for a trip *” crlf)
(printout t “****************************************************************” crlf)
(printout t “* *” crlf)
(printout t crlf crlf)
)

;=======================================

;- – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
; Rule print-repair displays a message
; on the proposed routes,
(defrule print-repair “”
(declare (salience 20))
(repair ?item)
=>
(printout t crlf)
(printout t “Proposed country for a trip: “)
(format t “%s%n%n” ?item)
)

.

### Project Details

• Date November 20, 2015
• Tags Prolog and Clisp