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

Any SML coders able to translate this to Python?


On Thu, Sep 6, 2018 at 2:29 PM, Marko Rauhamaa <marko at pacujo.net> wrote:
> Marko Rauhamaa <marko at pacujo.net> (Marko Rauhamaa):
>> 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
>> [...]
>> 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