F#递归函数readNonZeroValue运行失败,请求问题排查帮助
问题分析与修正
你的readNonZeroValue函数存在几个明确错误,导致无法正常运行:
错误点:
- 函数参数不匹配:定义函数时声明了参数
a,但调用时却使用readNonZeroValue ()无参调用,直接触发编译错误。实际上这个参数完全冗余,函数内部重新绑定了a,外部参数从未被使用。 - 输入提示位置错误:
printfn "Please enter a non-zero value"写在函数外部,只会在程序启动时打印一次,递归重试阶段不会再次提示用户,交互逻辑有问题。 - 语法小错误:
System.Console. ReadLine ()中的空格是多余的,正确写法应为System.Console.ReadLine()。
修正后的代码:
let rec readNonZeroValue () = printfn "Please enter a non-zero value" match int (System.Console.ReadLine()) with | 0 -> printfn "Error: zero value entered. Try again" readNonZeroValue () | a -> a let b = readNonZeroValue () printfn "You typed: %A" b
对比参考代码的注意点:
你的参考代码progLang虽然能运行,但同样存在冗余参数a——函数定义时的a从未被使用,内部重新绑定了同名变量。修正后的readNonZeroValue直接定义为无参函数(readNonZeroValue ()),逻辑更清晰,也彻底避免了参数不匹配的问题。
内容的提问来源于stack exchange,提问作者Christian Ilkjær
相关产品推荐
相关产品推荐

