[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Basile STARYNKEVITCH <basile@s...> |
| Subject: | Re: [Caml-list] tail rec |
skaller wrote:
> I have a silly idea. Introduce a new construction:
>
> let tailrec f ..
>
> This is the same as let rec except it checks every direct call to f
> is in tail position (and bombs out the compiler if not).
While I also want a similar construct or help, I believe your proposal
is wrong. What would be needed is a tailrec operator keyword that makes
the compiler check that a given call is in tail position. It is not a
function which is tail recursive, it is a call which is.
In that way, the classical factorial does not have any tail call, so
let rec fact n = if n <= 0 then 1 else n * tailrec fact (n - 1)
^^^^^^^
should give a warning, while the equivalent
let fact n =
let rec factloop n p =
if n <= 0 then p
else tailrec factloop (n - 1) (n * p)
in factloop n 1
However, I have a more elegant "solution" (actually not a solution but a
proposal) : that tools like ocaml -dtypes and the emacs mode (or the
ocamlbrowser) flag (e.g. show in a different color) each tail-recursive
call.
And yes, tail-recursion is syntactic, so all this could be a big camlp4
stuff.
Regards.
--
Basile STARYNKEVITCH http://starynkevitch.net/Basile/
email: basile<at>starynkevitch<dot>net mobile: +33 6 8501 2359
8, rue de la Faïencerie, 92340 Bourg La Reine, France
*** opinions {are only mines, sont seulement les miennes} ***