That's great to hear! Whenever I searched for this, I only found an old 
elm-dev post where implementing it was still being talked about.

I haven't really needed to write recursive loops in Elm yet. But in F#, 
I've written a few.

On Thursday, October 13, 2016 at 11:21:50 PM UTC-5, Joey Eremondi wrote:
>
> 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] 
> <javascript:>> 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] 
>> <javascript:>>:
>>
>> 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] <javascript:>.
>> 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] <javascript:>.
>> 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