[m-users.] Mode selection

Julien Fischer jfischer at opturion.com
Thu Oct 16 12:33:43 AEDT 2014

On Thu, 16 Oct 2014, Paul Bone wrote:

> This question came up on IRC today.  Consider append/3:
>    :- pred append(list(T), list(T), list(T)).
>    :- mode append(in, in, out) is det.
>    :- mode append(out, out, in) is multi.
> And a call to append with each of it's arguments fully instantiated.
>    % I've written these out so that I can name them and refer to them
>    % below.
>    A = [1, 2],
>    B = [3],
>    C = [1, 2, 3],
>    append(A, B, C).
> This is a case where "append(in, in, in) is semidet" is an implied mode.
> While it makes no (declarative semantics) difference, which mode of append
> will be used here?  Does the compiler select the first mode that fits or the
> "best" mode?
> A follow up question.  What if the implied mode is written down in the
> declaration.

See the comment above the predicate choose_best_match/8 in
compiler/modecheck_call.m.  It describes the selection algorithm used.
Or indeed just see the mailing list archives, as this question has
been asked (and answered!) before.


More information about the users mailing list