Any SML coders able to translate this to Python?

Marko Rauhamaa marko at pacujo.net
Tue Sep 4 09:32:29 EDT 2018


Steven D'Aprano <steve+comp.lang.python at 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
>>> I've tried reading up on SML and can't make heads or tails of the 
> "let...in...end" construct.
>>> The best I've come up with is this:
>> def isqrt(n):
> if n == 0:
> return 0
> else:
> r = isqrt(n/4)
> if n < (2*r+1)**2:
> return 2*r
> else:
> return 2*r+1
>> but I don't understand the let ... in part so I'm not sure if I'm doing 
> it right.

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()
(Also use // instead of /: isqrt = integer square root.)
Marko


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /