程序代写代做代考 prolog Prolog Conditional

Prolog Conditional

Prolog Conditional

2

Prolog Conditional

Related to the !, is the Prolog conditional test:

(Test -> ThenC ; ElseC)

where each of Test, ThenC, ElseC can be a general Prolog
query.

3

Conditional Example

student_fees(S, F):-

student(S),

(eu(S)->F=13500; F=29500).

The Effect of the

Prolog Conditional
Ignoring variables, given

H :- …., (Test -> ThenC ; ElseC), …

its effect is equivalent to rewriting the clause
as:

H:- …, cond,….

Where cond is defined as:

cond :- Test, !, ThenC.

cond :- ElseC.

Some Prologs implement it this way.

4

student_fees(S, F):-

student(S), (eu(S)->F=13500; F=29500).

This can be written alternatively as:

student_fees(S, F):-

student(S), check_fees(S,F).

check_fees(S, F) :-

eu(S), !, F=13500.

check_fees(S, F) :- F=29500.

5

6

Conditional Examples

weekend_plan(D, P):-

(dry_forecast(D),

\+transport_strike(D),

country-park(Park)) ->

P=goto(Park);

(film(F), P=goto(cinema(F))).

7

dry_forecast(16). dry_forecast(23).

country_park(richmond). transport_strike(23).

country_park(petworth). film(batman).

film(superman).

weekend_plan(D, P):-

(dry_forecast(D),

\+transport_strike(D),

country-park(Park)) ->

P=goto(Park);

(film(F), P=goto(cinema(F))).

8

?- weekend_plan(16, P).

P= goto(richmond) ;

no.

?- weekend_plan(23, P).

P=goto(cinema(batman));

P=goto(cinema(superman));

no.

9

Compare With

dry_forecast(16). dry_forecast(23).

country_park(richmond). transport_strike(23).

country_park(petworth). film(batman).

film(superman).

alt_weekend_plan(D, P):-

(dry_forecast(D),

\+transport_strike(D)) ->

(country-park(Park), P=goto(Park));

(film(F), P=goto(cinema(F))).

?- alt_weekend_plan(16, P).

P = goto(richmond);

P = goto(petworth);

no

?- alt_weekend_plan(23, P).

P = goto(cinema(batman));

P = goto(cinema(superman));

no
10

Yet another definition of max

alt_max(X,Y, Z) :- Y>X -> Z=Y; Z=X.

?- alt_max(1, 2, X).

X=2

?- alt_max(1, 2, 1).

no

11