将python转换为SML

2024-06-06 21:13:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将python程序转换为SML语言,但遇到了困难。这是python程序

def binomialCoeff(n, k):
    result = 1
    for i in range(1, k+1):
        result = result * (n-i+1) / i
    return result
 if __name__ == "__main__":
    print(binomialCoeff(10, 50))

Tags: namein程序语言forreturnifmain
1条回答
网友
1楼 · 发布于 2024-06-06 21:13:56

在这里很容易很早就陷入困境,因为翻译这样一个程序涉及到范式转换:你不能使用可变变量,你的主要控制结构是递归而不是迭代。因此,与其“盯着Python代码认真思考”,不如试着看看二项式系数是如何在标准ML中实现的,最好是在OCaml等非常类似的编程语言中实现的,如果不可用的话

要消除框架代码的障碍,您可以想象解决方案符合以下形式:

fun binomialCoeff (n, k) =
    ...

val _ = print (Int.toString (binomialCoeff (10, 50))

至于算法本身,Rosetta Code's OCaml solution(“简单递归版本”):

open Num;;
let rec binomial n k = if n = k then Int 1 else ((binomial (n-1) k) */ Int n) // Int (n-k)

可以更轻松地转换为标准ML:

fun binomialCoeff (n, k) =
    if n = k
    then 1
    else (binomialCoeff (n-1, k) * n) div (n-k)

但这与Python代码使用的算法并不完全相同

而且它既不健壮也不高效。(This one is。)

所以,也许你应该问问自己,你在这里的学习目标是什么。也许更简单的练习是,将factorialfibonacci从循环转换为递归是更好的任务

相关问题 更多 >