我有一个简单的函数,列出给定输入数的每个素数因子。它由以下组成:
let rec f n x a =
if x = n then
x::a
elif n % x = 0 then
f (n/x) x (x::a)
else
f n (x+1) a
let fact n = f n 2 []
fact 315
val factors : int list = [7; 5; 3; 3]
它有效,但我想把它作为一个单一的功能:如何定义fact
与f
直接嵌套?我试图应用出色的表达here的概念,但我没有抽象出如何在一个参数1(f
)中嵌套三个参数函数(fact
)。
答案 0 :(得分:6)
fact
的函数体移动到新行。确保它是缩进的。fact
的声明与您刚刚移动的函数体之间添加一个空行。fun
的整个定义,并粘贴将其添加到您在第二步中创建的空白行中。fact.
答案 1 :(得分:1)
您需要做的就是将递归函数f
移到fact
内,然后调用它。它将使用传递给fact
的参数:
let fact n =
let rec f n x a =
if x = n then
x::a
elif n % x = 0 then
f (n/x) x (x::a)
else
f n (x+1) a
f n 2 []
fact 315
//val it : int list = [7; 5; 3; 3]