On Thu, Sep 6, 2018 at 2:29 PM, Marko Rauhamaa <ma...@pacujo.net> wrote: > Marko Rauhamaa <ma...@pacujo.net> (Marko Rauhamaa): >> Steven D'Aprano <steve+comp.lang.pyt...@pearwood.info>: >>> I have this snippet of SML code which I'm trying to translate to Python: >>> >>> fun isqrt n = if n=0 then 0 >>> else let val r = isqrt (n/4) >>> in >>> if n < (2*r+1)^2 then 2*r >>> else 2*r+1 >>> end >> [...] >> You must make sure "r" doesn't leak outside its syntactic context so: >> >> def isqrt(n): >> if n == 0: >> return 0 >> else: >> def f2398478957(): >> r = isqrt(n//4) >> if n < (2*r+1)**2: >> return 2*r >> else: >> return 2*r+1 >> return f2398478957() > > Actually, this is a more direct translation: > > def isqrt(n): > if n == 0: > return 0 > else: > def f2398478957(r): > if n < (2*r+1)**2: > return 2*r > else: > return 2*r+1 > return f2398478957(isqrt(n//4)) >
I don't understand why you created that nested function instead of something simple like renaming the variable. Is there a difference here? ChrisA -- https://mail.python.org/mailman/listinfo/python-list