Ian, that is a great thought, but even if we split the list exactly in
half, the call stack fills up when the list length gets to around 4500.
partition _ list =
let
n = List.length list // 2
in
(List.take n list, List.drop n list)
In my specific problem, the "wrap" function finds the smallest rectangular
prism that encloses a set of 3D points. The "partition" function splits the
list of points in half, with a plane that is aligned with one of the box's
axes. I have a lot of tests to ensure the function doesn't break in weird
cases, like all of the points being identical. So I am pretty sure the
partition is doing a reasonable split.
I am taking a look at the trampoline library now...
On Tue, Jul 12, 2016 at 12:03 AM, Janis Voigtländer <
[email protected]> wrote:
> Maybe the Trampoline library can help you?
>
> http://package.elm-lang.org/packages/elm-lang/trampoline/1.0.0/Trampoline
>
>
> Am Dienstag, 12. Juli 2016 schrieb Nick H :
>
>> Here is a puzzle for you:
>>
>> For a large enough list, the code below will fill up the call stack and
>> crash. It makes sense that the Elm compiler can't optimize it with tail
>> calls, since the recursive function gets called more than once per
>> iteration.
>>
>> What is the best way to rewrite this without using recursion?
>>
>>
>>
>> type Tree = Leaf Foo | Node Bar Tree Tree
>>>
>>> create : List Foo -> Tree
>>> create faces =
>>> case faces of
>>> [] ->
>>> dummyFoo
>>>
>>> foo :: [] ->
>>> Leaf f
>>>
>>> list ->
>>> let
>>> box = wrap list
>>>
>>> ( left, right ) = partition box list
>>> in
>>> Node box (create left) (create right)
>>>
>>> wrap : List Foo -> Bar
>>>
>>> partition : Bar -> List Foo -> (List Foo, List Foo)
>>>
>>> --
>> 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.