我搞乱了F#和寓言,并试图测试我的理解。为此,我试着创建一个函数来计算给定的迭代次数。我想出来的是F#:不理解匹配..与
let eCalc n =
let rec internalECalc ifact sum count =
match count = n with
| true -> sum
| _ -> internalECalc (ifact/(float count)) (sum + ifact) (count+1)
internalECalc 1.0 0.0 1
工作正常,返回2.7182818284590455当
eCalc 20
称为但是,如果我尝试使用,我的想法是,更正确的形式
let eCalc n =
let rec internalECalc ifact sum count =
match count with
| n -> sum
| _ -> internalECalc (ifact/(float count)) (sum + ifact) (count+1)
internalECalc 1.0 0.0 1
我得到一个警告“[警告]这个规则永远不会匹配(L5,10-L5,11)”,并且返回值为0.(并且如果我交换'n'和'count '在比赛声明中)。在比赛声明中我不能使用'n'是否有原因?有没有办法解决这个问题,所以我可以使用'n'?
感谢
这是一个很好的解释,所以upvote :)我认为,一个更简单,更习惯的解决方案,但是,将使用“if/then/else”表达式。 –
是的,在这种情况下,“if/then/else”更好。我希望尽可能接近OP的原始代码来说明差异,但我不妨编辑答案以显示更好的方式。 – rmunn
我认为这样可以显示模式匹配语法,因此我会将它留在答案中,但也可能会添加* if/then/else'选项。 –