如何将txt文件作为[string]和输出[string]合并为Haskell中的1个字符串?

时间:2013-06-22 13:34:50

标签: haskell

我在Haskell中使用以下代码来获取字母组合的输出。

   combinations pre suf letters = prefixed ++ suffixed   
    where
     perms = permutation letters
     prefixed = map (\x -> pre ++ x) $ perms
     suffixed = map (\x -> x ++ suf) $ perms

我想导入一个像dictonary.txt这样的大文本文件作为列表[“Apple”,“Banana .....]”,其结构为:

Apple
Banana
Stawberry
...... and so on

这个导入的[String]我想与组合的输出[String]合并。有人可以帮我这个吗?

修改 为了更清楚。组合函数提供如下输出:

["banana","nanaba,..."]< - 几个字符的所有可能组合。

我想将此列表与一个列表合并,该列表包含从txt文件创建的列表(但我不知道如何将txt导入字符串列表并使用它进行合并)。所以输出就像。

["banana","nanaba,...,Apple,Banana,Strawbery"] 

之后它会在字符串中打印双字。

Ankurs代码的另一个编辑:

combinations pre suf letters = prefixed ++ suffixed
  where
    perms = permutation letters
    prefixed = map (\x -> pre ++ x)  $ perms
    suffixed = map (\x -> x ++ suf)  $ perms

fileLines :: FilePath -> IO [String]
fileLines file = readFile file >>= (\x -> return $ lines x)
        main = do 
         lines <- fileLines "directory.txt"
         putStr $ (combinations pre suf letters) ++ lines

我会在这个上得到一个解析器错误! :22:22:输入`='

时解析错误

有人可以帮我如何订购此代码吗?所以它没有得到错误的错误?

2 个答案:

答案 0 :(得分:1)

fileLines :: FilePath -> IO [String]
fileLines file = readFile file >>= (\x -> return $ lines x)


main = do
           lines <- fileLines "directory.txt"
           putStr $ show $ (combinations pre suf letters) ++ lines

答案 1 :(得分:1)

好的,首先,让我清理一下你的组合功能:

import Data.List (permutations)

-- Please add type signatures when you ask questions
combinations :: [a] -> [a] -> [a] -> [[a]]
combinations pre suf letters = prefixed ++ suffixed   
  where
    perms = permutations letters
    prefixed = map (pre ++) perms
    suffixed = map (++ suf) perms

不需要$,您可以使用运算符切片来避免写出lambda。

接下来,您的主要功能需要读取文件中的行。这很简单:

main = do
    ls <- fmap lines (readFile "someFile.txt")
    ...

现在假设您将组合函数传递给以下参数:

combinations "foo" "bar" "banana" :: [String]

这将为您留下以下主程序:

main = do
    ls1 <- fmap lines (readFile "someFile.txt")
    let ls2 = combinations "foo" "bar" "banana"
    ...

现在你需要弄清楚如何将ls1ls2合并到一个行列表中,然后将它们打印出来,或者做你需要处理的行列表。< / p>