3

なんらかの理由で機能しなくなるまで、次のFParsecコードを実行しようとしていました。

ここに画像の説明を入力してください

私が得ているエラーは

"The value is not a function and cannot be applied."

ただし、コードの最後の行()をコメントアウトしてtest ns ".."も、エラーは発生しません。これを解決する方法について何か考えはありますか?


テキスト形式のソースコードは次のとおりです。

open System
open FParsec

let test p str =
    match run p str with
    | Success(result, _, _)   -> printfn "Success: %A" result
    | Failure(errorMsg, _, _) -> printfn "Failure: %s" errorMsg

type Namespace = { Name : string; Classes : string list; }

let classes : Parser<string list, unit> = 
  many (spaces >>. many1Satisfy isLetter .>> spaces)

let ns =
  pipe2 
    (spaces >>. skipString "namespace" >>. spaces >>. many1Satisfy isLetter)
    (spaces >>. skipString "{" >>. classes .>> skipString "}")
    (fun name classes -> { Name = name; Classes = classes } )

test ns "namespace abc { def ghi }"
4

2 に答える 2

4

ここで誰も答えを推測できなかったでしょう。問題は、私が投稿から除外することに決めた他の事柄にありました:私のファイルのまさにヘッダー:

#if INTERACTIVE
    #r @"C:\Users\xyz\Desktop\fparsec-main-default\Build\VS10\bin\Debug\FParsecCS.dll";
    #r @"C:\Users\xyz\Desktop\fparsec-main-default\Build\VS10\bin\Debug\FParsec.dll";
#endif

;byを置き換える;;と、すべてのエラーが消えます。

#if INTERACTIVE
    #r @"C:\Users\xyz\Desktop\fparsec-main-default\Build\VS10\bin\Debug\FParsecCS.dll";;
    #r @"C:\Users\xyz\Desktop\fparsec-main-default\Build\VS10\bin\Debug\FParsec.dll";;
#endif
于 2011-08-24T19:55:28.230 に答える
-1

赤い下線は、コンパイラがpipe24つの引数を取っていると考えていることを明確に示しています。これは、次のようにテスト式全体を括弧で囲むことで確認できます。(test ns "namespace abs { def ghi })

理由はわかりませんが。pipe2呼び出しを括弧で囲んでみてください。

let ns = 
  (pipe2  
     (spaces >>. skipString "namespace" >>. spaces >>. many1Satisfy isLetter) 
     (spaces >>. skipString "{" >>. classes .>> skipString "}") 
     (fun name classes -> { Name = name; Classes = classes } ))
于 2011-08-24T18:57:45.623 に答える