gpt4 book ai didi

F# 递归函数在奇怪的无限循环中

转载 作者:行者123 更新时间:2023-12-01 06:09:34 26 4
gpt4 key购买 nike

我对 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”,因为该函数是递归的(那我为什么不呢?)为什么函数的第一个版本会永远运行?

编辑
事实证明这是一个完全的菜鸟错误。正如评论和答案中所解释的那样,我一路上创建了该函数的多个定义。

最佳答案

我怀疑您对 nextEven 有多个定义。这是你的第二个例子编译的唯一解释。复制:

module A =
let rec nextEven(x) =
let y = x + 1
if y % 2 = 0 then y
else nextEven y

open A //the function below will not compile without this

let nextEven(x) =
let y = x + 1
if y % 2 = 0 then y
else nextEven y //calling A.nextEven

尝试重置您的 FSI session 。

关于F# 递归函数在奇怪的无限循环中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15772228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com