Hi Michael,
> Thanks for showing up this inconsistency which is the result
> of the development of the language definition over time.
> The remark about the sharing of variables was introduced
> when the language was extended to non-confluent rewrite
> rules. As you have clearly shown, it is not conform with
> the initial presentation of the operational semantics with disjunctive
> expressions. In order to take account the developments
> on the semantical side during the last years,
> I would prefer to include a more precise description of the
> language in the report: one declarative semantics specifying
> what should be computed, e.g., in the form of the CRWL calculus,
> and one non-deterministic operational semantics including sharing
> and the needed narrowing strategy, e.g., in the form of the JSC'05
> paper. This means that the presentation with disjunctive
> expressions will be dropped.
A semantics is good and it should be a part of the Report or it
should be referenced by it. However, an intuitive less formal
explanation is also quite desirable. I think that a formal
semantics should go in an appendix, but the language features
should be presented more or less as they are now. Thus, the
problem will not go away by adding a formal semantics. There
should be an attempt to exaplain the behavior in English.
Note, that if x were shared in (1+x ? zero x where x free) then
there would be no problem. The current explanation is OK. This
may be inconsistent with current implementations (and perhaps
difficult to implement), but it is conceptually simpler. It is
also more general, since the programmer can code (1+x ? zero y
where x,y free) if sharing is not intended.
I have not considered all the consequences of one choice or the
other, but I think that sharing the variable would lead to more
intuitive results in various situations, e.g., if one were to use
a generator for x instead of narrowing, compute all the values of
the expression, replace (+) with a function that narrows, or
replace (?) with an expression that eventually evaluates to it.
Is there a clear reason why x should NOT be shared across the
arguments of (?), but must be in any other situation?
Sergio
_______________________________________________
curry mailing list
curry_at_lists.RWTH-Aachen.DE
http://MailMan.RWTH-Aachen.DE/mailman/listinfo/curry
Received on Di Okt 30 2007 - 09:50:06 CET