[comp.lang.prolog] if-then-else

bimbart@kulcs.cs.kuleuven.ac.be (Bart Demoen) (01/15/91)

I am sending the folowing on behalf of Roger Scowen:

I am convener of the ISO Working Group standardizing Prolog and have
been reading the correspondence on if-then-else in Prolog.

Defining an international standard for Prolog is taking a long time
because there are always at least two views proposed for the 
standard on every issue: 
    (1) keep it like it is, 
    (2) let's do it properly now.

Currently the predominant view seems to be the former, and when there
is no agreement, there is a tendency to leave that feature out.

Some of the apparent oddities of 
     Cond -> Then ; Else 
in Prolog arise because it is parsed as
     ';'( '->'(Cond, Then), Else ).

It is then natural for
     fail -> Then
to fail rather than succeed so that the "Else" will be executed in 
     fail -> Then ; Else

It is also natural to treat "->" as a local cut so that on resatisfying
     true -> Then ; Else
we will not execute both "Then" and "Else".

Most (but not all) Edinburgh implementations include this feature, and 
nearly all of them agree on its semantics. It is widely used, and simple 
to understand in practical cases when the programmer follows Richard 
O'Keefe's recommendation to write conditionals with the style:
    (  <condition_1> ->
         <if_branch_1>
    ;  <condition_2> ->
         <if_branch_2>
        ...
    ;  <else_branch>
    )
exactly like an Ada if statement, with "(" acting like "if",
"->" acting like "then", ";" acting like "else if" or
"else", and ")" acting like "end if".

The ISO working group currently intends to provide if-then-else in the 
standard with the semantics above, that is, agreeing with most 
Edinburgh Prolog implementations. The current proposal also provides 
a definite meaning to all the tricky cases mentioned in comp.lang.prolog.

But readers are warned that a standards committee may (and often does) 
change its mind.

Roger Scowen, SC22 WG17 (Prolog) Convener,
DITC/93, National Physical Laboratory, Teddington, Middlesex, England  TW11 0LW
15 January 1991
Tel (Britain): 081 943 6956   Tel (Abroad): +44 81 943 6956 
Fax (Britain): 081 977 7091   Fax (Abroad): +44 81 977 7091 
Email: rss@seg.npl.co.uk      Telex: 262344