[net.lang.prolog] Cut, var, nonvar, and Goebel's stardom

andrews@ubc-cs.UUCP (Jamie Andrews) (06/06/86)

In article <29700028@uiucdcs> reddy@uiucdcs.CS.UIUC.EDU writes:
>
>To rggoebel@watdragon:
>
>You can try explaining cut, var and nonvar logically.  If you do it
>successfully, you could become a star of the logic programming community.

     Well, as far as cut is concerned:  it's fairly easy to explain it
"logically", though not as a predicate or a goal, which is what I assume
you meant.  A predicate definition in Prolog using cuts can be rewritten
without cuts in a language closer to formal logic, such as RF-Maple
(see Voda&Yu, 1984 Logic Programming conference proceedings).  Such a
rewriting is straightforward and in fact reads more like FOL.

     Var and nonvar are essentially the read and write annotations of
Parlog and similar languages.  Again it's difficult to explain them as
predicates, but not as control primitives.  They have been defined using
all-solutions predicates, which are usually closely related to
negation-as-failure, but as Naish points out many of the all-solutions
implementations are faulty.

     Since Prolog's only language construct is the predicate call, a lot
of things have been expressed as predicate calls which are really nothing
of the kind.  That's what usually destroys the declarative reading.

     But in any case, Randy Goebel is already a star!  Didn't you catch
him on the Carson show??? :-)

--Jamie.
...!seismo!ubc-vision!ubc-cs!andrews
"That was my Lo... and these are my lilies"

u-reddy@utah-cs.UUCP (Uday U-reddy) (06/25/86)

In article <270@ubc-cs.UUCP> andrews@ubc-cs.UUCP (Jamie Andrews) writes:
>     Well, as far as cut is concerned:  it's fairly easy to explain it
>"logically", though not as a predicate or a goal, which is what I assume
>you meant.
>
>     Var and nonvar are essentially the read and write annotations of
>Parlog and similar languages.  Again it's difficult to explain them as
>predicates, but not as control primitives.
>
>--Jamie.

Sorry Jamie, I fail to understand this completely.  We had lengthy
discussions, in Prolog digest last year, on what is logical and what isn't.
But, to cut (!) the long story short, something is logical if it has a
logical value, like "true", or "false", or even nonstandard logical values
like "neither true nor false" or "both true and false" or whatever. 
Further, the logical value of any logical thing should be preserved under
instantiation.

Now, I am not sure if what you are saying has anything to do with the
logical-ness of these constructs.

Uday Reddy
reddy@uiuc.arpa  uiucdcs!reddy