// Learn more about F# at http://fsharp.org
// See the 'F# Tutorial' project for more help.
open System
let highLowGame () =
let rng = new Random()
let secretNumber = rng.Next() % 100 + 1
let rec highLowGameStep () =
printfn "Guess the secret number: "
let guessStr = Console.ReadLine()
let guess = Int32.Parse(guessStr)
match guess with
| _ when guess > secretNumber
-> (printfn "The secret number is lower")
highLowGameStep ()
| _ when guess = secretNumber
-> (printfn "You've guessed correctly!")
()
| _ when guess < secretNumber
-> (printfn "The secret number is higher")
highLowGameStep ()
highLowGameStep ()
[<EntryPoint>]
let main argv =
printfn "%A" argv
0 // return an integer exit code
Run Code Online (Sandbox Code Playgroud)
我已经检查了这个代码一千次,我得到一个警告说g uess is incomplete on pattern matching这绝对是不可能的......我也得到一个错误说value is not a function and cannot be applied.
我直接从书中复制了这个,所以我不明白这是怎么编译的?!
模式匹配上的空白区域是错误的.它应该是这样的:
match guess with
| _ when guess > secretNumber ->
(printfn "The secret number is lower")
highLowGameStep ()
| _ when guess = secretNumber ->
(printfn "You've guessed correctly!")
()
| _ when guess < secretNumber ->
(printfn "The secret number is higher")
highLowGameStep ()
Run Code Online (Sandbox Code Playgroud)
这修复了编译错误.至于警告,编译器正在做出最好的猜测,但它无法确定所有案例是否实际被覆盖.如果要修复警告,可以添加另一个案例:
| _ -> invalidOp("Invalid input")
Run Code Online (Sandbox Code Playgroud)