[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Any SML coders able to translate this to Python?


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.


-- 
Steven D'Aprano
"Ever since I learned about confirmation bias, I've been seeing
it everywhere." -- Jon Ronson