3

Java プログラムを Haskell に変換しようとしています。私の目標は、文字列をいくつかの文字列に分割し、これらをリスト内に配置することです。

これはこれまでの私のコードです

import Char
import IO
import Text.Regex

translate :: String -> Int
translate input = 
    testcode(splitRegex (mkRegex "\\s") input)

testcode は、最初の値が何であるかに応じていくつかのテストを行います。

testcode :: [String] -> Int -> Int
testcode [] 0
testcode (x:xs)  n
     |(x=="test") = 1
     |otherwise = testcode xs

私が取得し続けるコンパイルエラーは次のとおりです。

Could not find module `Text.Regex'
Perhaps you meant Text.Read (from base)

Text.Regex をインポートするにはどうすればよいですか?

4

2 に答える 2

8

Text.Regexregex-compatパッケージに入っています。インストールしましたか?

Cabal は haskell のパッケージ マネージャーです: http://www.haskell.org/haskellwiki/Cabal/How_to_install_a_Cabal_package

正規表現パッケージをインストールするには、シェルに次のように入力します。

cabal install regex-compat

関数がどのパッケージに属しているかを調べるには、Hayoo!を使用します。これは、haskell パッケージ リポジトリHackageの検索エンジンです。

于 2012-11-05T13:27:16.573 に答える
2

まず、コマンド ウィンドウを開いてと入力しますcabal install regex-compat。これにより、次のことができるようになりimport Text.Regexます。

次に、この種のことが再び発生した場合は、ライブラリの hayoo 検索(包括的ですが無差別) または関数の hoogle 検索(包括的ではありませんが、関数の型を検索することもできます) を実行します。そうすれば、それがどのパッケージに含まれているかを見つけて、インストールすることができます。

3 番目に、そしておそらくもっと重要なことですが、Haskell で物事を行うための優れた強力な方法があることを提案できますか? 以下にいくつかの例を示します。

words :: String -> [String]
words "Why not use some handy Haskell functions?" 
     = ["Why","not","use","some","handy","Haskell","functions"]

wordsはあなたの述べた目標を与えると思います。大量の優れたリスト処理関数を使用して、マイナーな正規表現ジョブを置き換えることができます。たとえば、ミキシング

dropWhile :: (a -> Bool) -> [a] -> [a]
dropWhile (/=',') "Haskell is great, I love it."
     = ", I love it."

import Data.Char      -- (at the top of your code)
takeWhile :: (a -> Bool) -> [a] -> [a]
takeWhile isAlpha "Well then"
     = "Well"

foldrまたは、scanrあなたが望むものを表現するためのきれいな方法になる可能性があります。

通常はリスト処理関数で十分ですが、解析のためにもっと重要なことが必要な場合は、優れたparsecライブラリが非常に便利です。これにより、完全なパーサーを作成することが途方もなく簡単になります。一度知ってしまえば、他のものの代わりに使いたくなるからです。

于 2012-11-05T14:34:19.633 に答える