[m-users.] Missing mode for list.head?
post at volker-wysk.de
Thu Mar 14 19:03:09 AEDT 2019
The list.head function can fail, because of the way it is implemented, even
when it is known at compile time that the argument list is not empty:
:- func head(list(T)) = T is semidet.
head([X | _]) = X.
There is no mode declaration for head in list.m.
But it could be implemented like this:
:- func head1(list(T)) = T.
:- mode head1(in) = out is semidet.
:- mode head1(in(non_empty_list)) = out is det.
head1([A|_]) = A.
This way you can have a deterministic version of head, when it is known that
it input list isn't empty.
Am I right?
More information about the users