我刚开始使用 FSharp 并有这个功课,希望有人能帮助我。 我必须编写一个程序,它接受一个整数列表并返回一个 float 。应按连分数计算。 所以如果 int 列表是 [4; 5; 6] float 将通过以下方式计算:4 + (1/(5 + 1/6) )
函数必须是递归的。 我写了以下内容:
let rec fractionDecimal (numberlist : int list) : float =
match numberList with
|[] -> 0.0
| x :: y -> x + 1.0 / fractionDecimal y
它不起作用,因为 (fractionDecimal y) float 与 int 类型不匹配。 您对如何解决问题或如何使我的代码正常工作有任何建议吗? 提前致谢
最佳答案
问题是您试图将 1.0/fractionDecimal tail
的值(一个 float
)添加到 head
,一个 int
。
您可以使用 float
函数来补救这种情况。
let rec fractionDecimal (numberList : int list) : float =
match numberList with
| [] -> 0.0
| head :: tail -> float head + 1.0 / fractionDecimal tail
这个 Microsoft 文档很好地描述了这里发生的事情:https://learn.microsoft.com/en-us/dotnet/fsharp/language-reference/compiler-messages/fs0001
关于design-patterns - 在 F# 中 float 的整数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64247845/