yea

On Fri, Feb 10, 2017 at 5:21 PM, Joh-Tob Schäg <johtob...@gmail.com> wrote:

> (de natsum (N)
>   (if (=0 N)
>     0
>     ( +  N
>           ( natsum ( dec N)))))
>
> Like that?
> Am 10.02.2017 15:28 schrieb "Mike Pechkin" <mike.pech...@gmail.com>:
>
>> hi,
>>
>> On Fri, Feb 10, 2017 at 3:07 PM, Christopher Howard <
>> christopher.how...@qlfiles.net> wrote:
>>
>> > Hi list. When I try to do
>> >
>> > (apply '+ (range 1 1000000)
>> >
>>
>>
>> ​List of ​millions of items is not a problem.
>> Problem how you use it.
>> (apply) is not for free, ​It *creates*​ a function call with a million of
>> arguments.
>> Stack size make sense.
>>
>>
>> > I get segfault. I thought maybe this was some kind of internal
>> > limitation of the apply function, so I defined a foldl:
>> >
>> > (de foldl (Fn Acc Lst)
>> >     (if (== () Lst) Acc
>> >         (let Acc2 (Fn Acc (car Lst))
>> >              (foldl Fn Acc2 (cdr Lst)) ) ) )
>> >
>> > : (foldl '+ 0 (range 1 1000))
>> > (foldl '+ 0 (range 1 1000))
>> > -> 500500
>> > : (foldl '+ 0 (range 1 1000000))
>> > (foldl '+ 0 (range 1 1000000))
>> >
>> >
>> ​
>> Stack size makes sense too.
>> I like recursions this way:
>>
>> (de rec1 (F A L)
>>    (if L
>>       (rec1 F (inc 'A (++ L)) L)
>>       A ) )
>>
>> recursion with hidden accumulator from outer call and car-cdr:
>> (de rec2 (F L A)
>>    (default A 0)
>>    (if L
>>       (rec2 F (cdr L) (inc 'A (car L)))
>>       A ) )
>> The call will be:  (rec2 '+ (range 1 1000000)))
>>
>>
>> As recursion just loop you can implement it without big stack too:
>> (de sum1 (L)
>>    (let N 0
>>       (for I L
>>          (inc 'N I) ) ) )
>>
>> even without list creation:
>> (de sum2 (X)
>>    (let N 0
>>       (for I X
>>          (inc 'N I) ) ) )
>>
>>
>> And finally, that's why (sum) was implemented:
>> (sum prog (range 1 1000000)))
>>
>>
>> Bonus: for practice write recursion function to sum numbers without
>> (range)
>
>

Reply via email to