2024-06-06 21:13:56 发布
网友
我试图将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))
在这里很容易很早就陷入困境,因为翻译这样一个程序涉及到范式转换:你不能使用可变变量,你的主要控制结构是递归而不是迭代。因此,与其“盯着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。)
所以,也许你应该问问自己,你在这里的学习目标是什么。也许更简单的练习是,将factorial或fibonacci从循环转换为递归是更好的任务
factorial
fibonacci
在这里很容易很早就陷入困境,因为翻译这样一个程序涉及到范式转换:你不能使用可变变量,你的主要控制结构是递归而不是迭代。因此,与其“盯着Python代码认真思考”,不如试着看看二项式系数是如何在标准ML中实现的,最好是在OCaml等非常类似的编程语言中实现的,如果不可用的话
要消除框架代码的障碍,您可以想象解决方案符合以下形式:
至于算法本身,Rosetta Code's OCaml solution(“简单递归版本”):
可以更轻松地转换为标准ML:
但这与Python代码使用的算法并不完全相同
而且它既不健壮也不高效。(This one is。)
所以,也许你应该问问自己,你在这里的学习目标是什么。也许更简单的练习是,将
factorial
或fibonacci
从循环转换为递归是更好的任务相关问题 更多 >
编程相关推荐