>
> One current limitation of Elm is that there is no tail call elimination


Like Janis says, this is not true, and in most cases, tail-recursive
functions will become while-loops in the resulting JS.

For example, consider a list-summing function:

sum : List Int -> Int
sum =
  let
    helper accum lst =
      case lst of
        [] -> accum
        (h :: t) -> helper (h + accum) t
  in
    helper 0

This gets turned into the following JS in 0.18 (though TCO has been around
for a few versions):

var _user$project$Main$sum = function () {
    var helper = F2(
        function (accum, lst) {
            helper:
            while (true) {
                var _p0 = lst;
                if (_p0.ctor === '[]') {
                    return accum;
                } else {
                    var _v1 = _p0._0 + accum,
                        _v2 = _p0._1;
                    accum = _v1;
                    lst = _v2;
                    continue helper;
                }
            }
        });
    return helper(0);
}();



On Thu, Oct 13, 2016 at 9:10 PM, Janis Voigtländer <
[email protected]> wrote:

> Your statement about tail call elimination is wrong. The Elm compiler does
> it.
>
> Am 13.10.2016 um 23:38 schrieb Kasey Speakman <[email protected]>:
>
> It probably sounds insane that Elm doesn't have `for` or `while`. It would
> to me before exposure to functional programming.
>
> There are prebuilt functions for working with collections like List
> <http://package.elm-lang.org/packages/elm-lang/core/latest/List> and Array
> <http://package.elm-lang.org/packages/elm-lang/core/4.0.5/Array> which
> will take care of most needs.
>
> When you find you need something a bit more custom, a recursive loop is
> the normal way. Those take a little practice to get the feel for them.
>
> Often when I write my own recursive loop, I later find that I can
> accomplish the same by combining list operations or by just playing with
> List.foldr.
>
> One current limitation of Elm is that there is no tail call elimination
> when using a recursive loop, so if you write your own loop and have a large
> list, you can get a stack overflow. In practice, this is not a typical
> problem due to other factors. I.e. miles of data on the screen impacts
> performance, and is not considered good UX.
>
> On Wednesday, October 12, 2016 at 5:52:31 AM UTC-5, Patricia Nicole
> Benedicto wrote:
>>
>> hi can i ask what is the repetiton control structucture of this
>> programming languages?
>>
> --
> You received this message because you are subscribed to the Google Groups
> "Elm Discuss" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Elm Discuss" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to