How explain why Python is easier/nicer than Lisp which has a simpler grammar/syntax?
Marco Sulla
Marco.Sulla.Python at gmail.com
Fri Aug 7 17:01:43 EDT 2020
On Fri, 7 Aug 2020 at 22:35, Terry Reedy <tjreedy at udel.edu> wrote:
> This is a common misconception. Linear iteration and tail recursion are
> equivalent. The issue is calculating values once versus multiple times.
> Here is the fast recursion equivalent to the fast iteration.
>
> def fib(n, pair=(1,0)):
> previous, current = pair
> if n:
> return fib(n-1, (current, previous + current))
> else:
> return current
>
> for i in range(10): print(fib(i), end=' ')
> # 0 1 1 2 3 5 8 13 21 34
It seems to me a sort of not persistent caching. If you do:
fib(very_large_number)
without calculating any previous Fibonacci number before, it will be
very slow and you could have a stack overflow.
A language with tail call optimization will execute it faster and with
less memory. Otherwise why asyncio de-facto implemented tail
optimization?
PS: it seems there's a module that implement tail call:
https://github.com/baruchel/tco
More information about the Python-list
mailing list