分类:
2010-11-22 02:32:43
今天尝试了一下用haskell模仿SQL进行文本搜索
代码:
module Funs where import Data.List import Monad import System.Directory import System.FilePath import System.IO import Text.Regex.PCRE data Store t p = Text p | Csv p | Bin p | File p selectFrom (Text store) = do content <- readFile store return$lines content unionIt :: IO [[String]] -> IO[String] unionIt = liftM concat select :: IO [FilePath] -> IO [String] select paths = paths >>= \ps -> unionIt(filterM doesFileExist ps >>= mapM (\p -> selectFrom (Text p))) from :: FilePath -> IO [FilePath] from path = let (dir, files) = splitFileName path in liftM(\lines->[dir++line | line <- lines, line=~files]) ((getDirectoryContents.takeDirectory) dir) whereLines :: String -> [String] -> IO [String] whereLines reg lines = return $filter (\line -> line =~ reg :: Bool) lines
这段代码已经包含了基本的 select from where 模式,甚至可以说已经是一个实 用的实现,但是对于我来说,期待它有进一步的功能:
chinaunix网友2010-11-22 17:57:17
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com