小编Mat*_*ero的帖子

标准ML斐波那契溢出

我一直在搞乱学习一些功能性编程,并决定选择ML作为我的工具.自从我拿起ML之后仅仅几天,可能已经花了大约5-6个小时来解决一些问题.无论如何,关于我的问题.

通常在学习语言时,我会通过一些项目euler问题来了解语法和操作.所以我一直在研究一个需要因子函数的问题.虽然我一直遇到溢出错误,通常在其他语言中解决这个问题,我会添加一些备忘录或依赖标准库来避免它,但我对ML的经验不足使得memoization看起来很陌生.

我尝试使用尾递归但没有骰子这样的东西:

fun fact_helper (0,r:int) = r
| fact_helper (n:int,r:int) = fact_helper (n-1,n*r);

fun factorial n:int = fact_helper(n, 1);
Run Code Online (Sandbox Code Playgroud)

即使使用标准库:

foldl op * 1 (List.tabulate(100, fn x => x + 1))
Run Code Online (Sandbox Code Playgroud)

会导致溢出.

我做了一些谷歌搜索,但ML似乎有非常稀疏的讨论或社区.所以我想我的问题是什么是一个例子,或者我应该如何以memoized方式编写我的阶乘函数,或者一般如何避免ML中的溢出.

recursion functional-programming ml sml smlnj

4
推荐指数
1
解决办法
388
查看次数

标签 统计

functional-programming ×1

ml ×1

recursion ×1

sml ×1

smlnj ×1