caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Damien Doligez <Damien.Doligez@inria.fr>
To: rossberg@ips.cs.tu-bs.de
Cc: caml-list@inria.fr
Subject: Re:  Restrictions of let rec
Date: Mon, 9 Mar 1998 18:36:12 +0100	[thread overview]
Message-ID: <199803091736.SAA29116@tobago.inria.fr> (raw)

>From: Andreas Rossberg <rossberg@ips.cs.tu-bs.de>
[...]
>  let rec f = f' some_defaul_arg
>  and f' v = function ... -> ...f' v' x... | ... -> ...f y... | ...
>
>The compiler argues that "this kind of expression is not allowed with
>`let rec'", probably because the RHS of f is neither an abstraction nor
>a constructor application nor does f appear in it.
                           ^^^^^^^^^^^^^^^^^^^^^^^

This last item is irrelevant.  The RHS has to be a function
abstration, a constructor, an array, or a record.  More precisely,
every RHS of a let rec must be a value and not a variable. <<value>>
is defined as a subclass of expression:

value :
  | value-path
  | constant
  | ( value )
  | begin value end
  | ( value : typexpr )
  | value, value {, value}
  | ncconstr value
  | value :: value
  | [ value {; value} ]
  | [| value {; value} |]
  | { label = value {; label = value} }
  | function pattern-matching
  | fun multiple-matching
  | let [rec] let-binding {and let-binding} in value

Note that "pattern-matching" and "multiple-matching" in the above are
the real thing, which may contain arbitrary expressions.


>I know it's easy to avoid this by doing eta conversion, but I don't see
>the point in disallowing such definitions. What's the rationale?

In short, we want to avoid run-time errors.


>Maybe
>it's an oversight and the compiler should actually check whether f
>appears on _any_ RHS of the let rec?

I don't understand this remark, since f does appear on the RHS of f'
in your example.  Anyway, when f does not appear in any RHS, then its
definition is not really recursive, so you shouldn't include f in the
let rec (unless you're trying to obfuscate your code).

-- Damien





             reply	other threads:[~1998-03-10 18:40 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1998-03-09 17:36 Damien Doligez [this message]
  -- strict thread matches above, loose matches on Subject: below --
1998-03-09 16:15 Andreas Rossberg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=199803091736.SAA29116@tobago.inria.fr \
    --to=damien.doligez@inria.fr \
    --cc=caml-list@inria.fr \
    --cc=rossberg@ips.cs.tu-bs.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).