Loops 循环/递归直到输入有效

Loops 循环/递归直到输入有效,loops,recursion,f#,Loops,Recursion,F#,我试图编写一些代码,在输入有效的文件路径或“退出”之前一直询问用户 我现在所拥有的: let (|ValidPath|_|) str = if File.Exists str then Some ValidPath else None type Return = |Path of string |Exit let rec ask = printfn "%s" "Please enter a valid path or \"exit\"" let

我试图编写一些代码,在输入有效的文件路径或“退出”之前一直询问用户

我现在所拥有的:

let (|ValidPath|_|) str =
    if File.Exists str then Some ValidPath
    else None

type Return =
    |Path of string
    |Exit

let rec ask =
    printfn "%s" "Please enter a valid path or \"exit\""
    let input = Console.ReadLine()
    match input with
    | "exit" -> Exit
    | ValidPath -> Path input
    | _ -> ask
ask
函数有一个
值“aks”将作为其自身定义的一部分进行计算
错误


我能做什么?

问题是
ask
不是一个函数,而是一个递归值。您需要获取一个参数才能使其成为函数:

let rec ask () =
    printfn "%s" "Please enter a valid path or \"exit\""
    let input = Console.ReadLine()
    match input with
    | "exit" -> Exit
    | ValidPath -> Path input
    | _ -> ask ()