我正在尝试使用动态编程来计算二项式系数。我一直收到这个错误
fun binomial(m:int, n:int, DP) =
if n = m orelse n = 0 then
Array2.update(DP, m, n, 1)
else if Array2.sub(DP, m, n) = ~1 then (
if Array2.sub(DP, m-1, n) = ~1 then
Array2.update(DP, m-1, n, binomial(m-1, n, DP))
else
Array2.update(DP, m-1, n, Array2.sub(DP, m-1, n));
if Array2.sub(DP, m-1, n-1) = ~1 then
Array2.update(DP, m-1, n-1, binomial(m-1, n-1, DP))
else
Array2.update(DP, m-1, n-1, Array2.sub(DP, m-1, n-1));
let
val k = Array2.sub(DP, m-1, n) + Array2.sub(DP, m-1, n-1);
in
Array2.update(DP, m, n, k)
end
)
else
Array2.update(DP, m, n, Array2.sub(DP, m, n));
Array2.sub(DP, m, n)
我不明白这个错误试图说的是什么。
6.5-25.48 Error: right-hand-side of clause doesn't agree with function result type [literal]
expression: unit
result type: int
in declaration:
binomial =
(fn (<pat> : int,<pat> : int,DP) =>
if <exp> orelse <exp>
then Array2.update <exp>
else if <exp> then <exp> else <exp>)
任何人都可以帮助我吗?
答案 0 :(得分:0)
您的函数binomial
会返回Array2.update
的结果,即unit
。但是你将这个返回值作为最后一个参数传递给Array2.update
,它期待int
。
Array2.sub(DP,m,n)
)不是你的功能的一部分 - 如果你想建立一个表达式列表,你需要环绕它带括号。而不是
fun binomial (m,n,DP) = <update logic>; Array2.sub(DP,m,n)
你想要
fun binomial (m,n,DP) = (<update logic>; Array2.sub(DP,m,n))