当谈到 F# 时,我非常陌生,并且我遇到了一个处理递归函数的小问题,我希望它可以帮助我理解。
我有一个应该吐出下一个偶数的函数:
let rec nextEven(x) =
let y = x + 1
if y % 2 = 0 then y
else nextEven y
// This never returns..
nextEven 3;;
我使用 'rec' 关键字,以便它是递归的,尽管当我使用它时,它会出于某种原因在无限循环中运行。如果我像这样重写函数:
let nextEven(x) =
let y = x + 1
if y % 2 = 0 then y
else nextEven y
然后一切正常(没有 rec 关键字)。出于某种原因,我虽然需要'rec',因为该函数是递归的(那我为什么不呢?)为什么该函数的第一个版本会永远运行?
编辑
原来这是一个完全的菜鸟错误。正如评论+答案中所解释的那样,我一路创建了函数的多个定义。