在“Expert F# 3.0”一书中,有一个“lex”和“parse”多项式表达式的文本解析示例。我试图理解它(没有对所写代码的解释),我遇到了这样的函数:
let parseIndex src =
match tryToken src with
| Some(Hat,src) ->
match tryToken src with
| Some(Int num,src) -> (num,src)
| _ -> failwith "expected an int after ^"
| _ -> (1,src)
它使用该功能
let tryToken (src:TokenStream) =
match src with
| head::rest -> Some(head, rest)
| _ -> None
该函数parseIndex
使用该参数src
,并且随着代码tryToken
多次使用的进行,每次,返回src
的都是其他东西,但该函数仍然使用该名称!
我的问题是:parseIndex
这里到底在做什么src
?因为在第二次模式匹配中,它使用src
好像它是由 给出的不同值tryToken
,但是查看 tryToken,我发现它应该在每次使用模式匹配时给出相同的结果。
Hat
和Int
你看到的是联合案例,Token
如type TokenStream = Token list