[mercury-users] Incomprehensible error output, even with -E.
Julien Fischer
juliensf at csse.unimelb.edu.au
Thu Feb 2 19:07:11 AEDT 2012
On Thu, 2 Feb 2012, Michael Richter wrote:
> On 2 February 2012 05:50, Julian Fondren <ayrnieu at gmail.com> wrote:
>
>> to make the problem clearer, you have here
>>
>> A = (func(X) = B, C),
>>
>> How is this not like your definitions of named functions?
>>
>>
> It's got a lambda instead of a :- func body?
It has nothing to with it being a lamda.
> Maybe I'm fundamentally misunderstanding the syntax of funcs vs. preds.
> (There doesn't appear to be a grammar for Mercury in the language
> reference so I'm only inferring what's permitted and what's not.)
For the syntax of functions see the ``Rules'' section of the reference
manual (Section 2.8). Of relevance here are the following statements
from that section.
A function rule is an item of the form ``Head = Result :- Body''.
The Result and the arguments of Head must be valid data-terms.
The Body must be a valid goal.
In this instance we have ``func(X) = B, C''. "B, C" is a goal, *not*
a data-term (i.e an expression). That is what the initial error
message is trying to tell you:
man_or_boy.m:030: In clause for predicate `main'/2:
man_or_boy.m:030: � error: the language construct `,'/2 should be used as a
man_or_boy.m:030: � goal, not as an expressn
Julien.
More information about the users
mailing list