[m-rev.] for review: unification expressions
Simon Taylor
stayl at cs.mu.OZ.AU
Tue Dec 4 17:24:59 AEDT 2001
Fergus, is this change OK?
Simon.
On 23-Nov-2001, Simon Taylor <stayl at cs.mu.OZ.AU> wrote:
> --- doc/reference_manual.texi
> +++ doc/reference_manual.texi
> @@ -1078,2 +1078,2 @@
> -The semantics of a unification expression is that @var{X} and @var{Y}
> -are unified, and the expression is equivalent to the unified value.
> +The meaning of a unification expression is that the arguments are unified,
> +and the expression is equivalent to the unified value.
> @@ -1081,8 +1081,4 @@
> - at w{@code{Z = X @@ Y}} is equivalent to the conjunction
> - at w{@code{Z = X, Z = Y}}.
> -
> -Unification expressions are most useful when writing switches
> -(@pxref{Determinism checking and inference}). The arguments
> -of a unification expression are examined when checking for
> -switches. The arguments of an equivalent user-defined function
> -would not be.
> +The operational semantics of an expression @w{@code{X @@ Y}}
> +is that the expression is replaced by a fresh variable @var{Z}, and
> +immediately after @var{Z} is evaluated, the conjunction
> + at w{@code{Z = X, Z = Y}} is evaluated.
> @@ -1100,4 +1096,4 @@
> -p(Y, Z) :-
> - Y = X,
> - Y = f(_, _),
> - Z = X.
> +p(H1, H2) :-
> + H1 = X,
> + H1 = f(_, _),
> + H2 = X.
> @@ -1104,0 +1101,6 @@
> +
> +Unification expressions are most useful when writing switches
> +(@pxref{Determinism checking and inference}). The arguments
> +of a unification expression are examined when checking for
> +switches. The arguments of an equivalent user-defined function
> +would not be.
> --- tests/hard_coded/unify_expression.exp
> +++ tests/hard_coded/unify_expression.exp
> @@ -2,0 +3 @@
> +r failed (as expected)
> --- tests/hard_coded/unify_expression.m 12 Nov 2001 11:08:18 -0000 1.1
> +++ tests/hard_coded/unify_expression.m 22 Nov 2001 21:03:06 -0000
> @@ -8,7 +8,7 @@
>
> :- implementation.
>
> -:- import_module require.
> +:- import_module require, std_util.
>
> :- type t
> ---> f(int, int)
> @@ -19,11 +19,38 @@
> io__write(X),
> io__nl
> ;
> - io__write_string("failed\n")
> + io__write_string("Error: p failed\n")
> + ),
> + ( { q(1, 2) } ->
> + print("Error: q succeeded"), nl
> + ;
> + print("q failed (as expected)"), nl
> + ),
> +
> + ( { r(1, 2) } ->
> + print("Error: r succeeded"), nl
> + ;
> + print("r failed (as expected)"), nl
> ).
>
> :- pred p(t::in, t::out) is semidet.
>
> p(X @ f(_, _), X).
> p(g(X @ f(_, _)), X).
> -p(g(g(_)), _) :- error("p").
> +
> +:- pred q(int::in, int::in) is semidet.
> +q(X, X @ g(_, _)).
> +
> +:- pred r(int::in, int::in) is semidet.
> +r(X, X @ g(1, 2)).
> +
> +:- func g(int, int) = int.
> +:- mode g(in, in) = out is semidet.
> +:- mode g(out, out) = in is semidet.
> +g(1, 2) = X :-
> + ( semidet_succeed ->
> + error("g called")
> + ;
> + X = 3
> + ).
> +
--------------------------------------------------------------------------
mercury-reviews mailing list
post: mercury-reviews at cs.mu.oz.au
administrative address: owner-mercury-reviews at cs.mu.oz.au
unsubscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: unsubscribe
subscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------
More information about the reviews
mailing list