嘿,我刚刚开始使用Haskell,我正在尝试编写一个程序,通过读取包含一些翻译的.txt文件来翻译输入单词。在此之前,我编写了一个程序,让用户可以进行翻译。
Socket.setReuseAddress()
所以现在我有了文件woerterbuch.txt,其中我的英文和德文单词如下所示:Hello Hallo,House Haus等。 我现在要做的是将这些单词写入元组,这样如果用户输入英文单词,我就可以打印第二个(德语)单词。
import System.IO
main :: IO ()
main = do
putStrLn "Type in an english word"
d <- getLine
if null d
then return ()
else do
putStrLn "Type in a german translation"
b <- getLine
putStrLn (d ++ " means in german " ++ b)
appendFile "woerterbuch.txt" (", " ++ d ++ " " ++ b)
main
这是我多次尝试后想出来的,我知道import System.IO
main :: IO()
main = do
putStrLn "Type in an english word"
d <- getLine
[contents] <- readFile "woerterbuch.txt"
if d `elem` [contents]
then do
print contents
else do
putStrLn "There's no translation available!"
是列表所以我需要替代我的.txt文件,然后尝试推出元组的第二个单词elem
命令。
首先,我如何创建作为元组的翻译输入,其次如何测试所请求的单词是否在此列表中,然后打印出它所属的元组的第二个元素。
任何帮助将不胜感激。
答案 0 :(得分:1)
我知道elem用于列表,所以我需要一个替代
您可以使用Map.fromList
创建平衡树词典 - Data.Map
。具体来说,
import qualified Data.Map as Map
main = do
contents <- readFile "woerterbuch.txt"
let ls = lines contents
let ws = fmap words ls
let m = Map.fromList [(t!!0, t!!1) | t <- ws, length t == 2]
...
允许您使用m
作为字典。