Re: [m-users.] IO argument clobbering
"Zoltan Somogyi" <[email protected]>
| Newsgroups | gmane.comp.lang.mercury.general |
|---|---|
| Message-ID | <[email protected]> |
On 2023-07-17 17:43 +02:00 CEST, "Volker Wysk" <[email protected]> wrote: > Am Montag, dem 17.07.2023 um 17:39 +0200 schrieb Volker Wysk: >> But the "in(callback)" inst isn't ground. It's a higher order inst. Only >> the "in" with zero arguments is an abbreviation for "in(ground)". > > Hmmm... Looks like I was confused about what "ground" means. In different contexts, "ground" means several related and similar but nevertheless slightly different things. Which meaning of "ground" people mean when they write that term is *usually* clear from the context, but not always. The standard meaning in logic programming theory is simply "a term that contains no variables", and all uses of "ground" include this meaning. But Mercury goes beyond standard logic programming theory by having types, including higher order types. When you write "ground" in a Mercury program, that occurrence of "ground" describes a term that contains no variables AND whose type is either not a higher order type, or is a higher order function type with the standard function mode (which is: all arguments are input, the return value is output). It cannot be a higher order predicate type, or a higher order function type with a nonstandard mode, because for those, you need to tell the compiler the modes of their arguments. If you don't give the compiler this info, you get the error message that started this thread. There is a similar issue with respect to uniqueness. The inst "ground" describes a reference to a term that contains no variables, and is not the only reference to that term. If you want to describe a reference to a term that contains no variables but it IS the only reference to that term, what you write is "unique". Internally in the Mercury compiler, the representation of ground insts is parameterised by the absence/presence of both uniqueness and higher order inst information. The "ground" inst in Mercury programs corrresponds to the absence of both of these kinds of information. And yet the compiler's name even for insts with one or both of these kinds of information is still "ground". So you see, even the Mercury language and the Mercury compiler disagree on which variant meaning should be called "ground" :-) Zoltan. _______________________________________________ users mailing list [email protected] https://lists.mercurylang.org/listinfo/users