[m-rev.] Re: for review: parsing_utils improvements

Zoltan Somogyi zs at csse.unimelb.edu.au
Tue Sep 29 17:50:35 AEST 2009


On 29-Sep-2009, Ian MacLarty <maclarty at csse.unimelb.edu.au> wrote:
> But how is that different from what is happening in parse/4?

Not at all; that should be cc_multi as well.

> semantics of parse/3 as:
> 
> parse(Input, Parser, Result) <=>
>     new_src_and_ps(Str, Src, PS0),
>     ( Parser(Src, Val, PS0, _), Result = ok(Val)
>     ; not Parser(Src, _, PS0, _), Result = error(_, _, _)
>     )

Yes, but *which* error would Result be bound to?

> So declaratively, if Parser(Src, _, PS0, _) is false, Result will be
> error/3, but the arguments to error/3 are unspecified.  This looks a
> lot like the declarative semantics of try.  So surely parse/3 should
> be cc_multi too?

Yes.

> But then this use of cc_multi doesn't seem to fit the notion of
> determinism described in the reference manual, which only talks about
> how many times a *procedure* should *succeed* (an operational
> property).

If it can succeed exactly once both declaratively and operationally,
it is det. If it can succeed exactly once operationally but more times
declaratively, it is cc_multi.

> p([_]).
> 
> This compiles.  It succeeds only once, but declaratively it has many
> solutions (the interpretation includes many ground atoms).  If try is
> cc_multi then why isn't p multi?

Because even declaratively, it has a single most general solution,
to wit, HeadVar_1 = [X] for some X. This solution is unique up to
variable renaming.

Zoltan.
--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to:       mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions:          mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------



More information about the reviews mailing list