1

本「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ですか? 2 番目のパターン マッチングでsrcは、 によって指定された定義値であるかのように使用されますが、tryTokentryTokenを見ると、パターン マッチングを使用するたびに同じ結果が得られるはずです。

Hatと、Intご覧のとおり、 の結合ケースですTokentype TokenStream = Token list

4

2 に答える 2

1

後のバインディングは、以前のバインディングを隠します。x何度でもバインドできます:

let x = 1
let x = 2
let x = 3
...

スコープの残りの部分では、最後のもののみが表示されます。

于 2013-10-28T22:14:33.613 に答える