2

正規表現に基づいて [[String]] をフィルタリングしようとしています。

filter (\fn -> case (matchRegex (mkRegex "*.exe") fn) of Nothing -> False
                                                         Just _ -> True) 
       directory_info

残念ながら、ラムダ関数はここでは構文的に無効です。ghc によると、パターン マッチは式のコンテキストでは発生しません。

意図した意味を簡潔に実行するには、これをどのように言い換えるべきですか?

4

3 に答える 3

12

があるのに、なぜ正規表現を使用するのですSystem.FilePathか? この場合は、takeExtension機能を試してください。

filter (\fn -> takeExtension fn == ".exe") directory_info
于 2013-05-17T19:20:15.683 に答える
6

まず、正規表現が間違っています。である必要があります".*\\.exe"。使用しているのはグロビングと呼ばれます。

次に、=~代わりに構文を使用してみてください

たとえば、これはうまくいくはずです:

filter (\fn -> fn =~ ".*\\.exe" :: Bool) directory_info

また、ラムダを使用する必要はありません。それを関数に変えるとうまくいくかもしれません。

于 2013-05-17T19:19:57.783 に答える