我在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:输入`='
时解析错误有人可以帮我如何订购此代码吗?所以它没有得到错误的错误?
答案 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"
...
现在你需要弄清楚如何将ls1
和ls2
合并到一个行列表中,然后将它们打印出来,或者做你需要处理的行列表。< / p>