Haskell,尝试翻译给定字典中的输入单词

时间:2017-05-12 16:30:02

标签: haskell dictionary input tuples

嘿,我刚刚开始使用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命令。 首先,我如何创建作为元组的翻译输入,其次如何测试所请求的单词是否在此列表中,然后打印出它所属的元组的第二个元素。 任何帮助将不胜感激。

1 个答案:

答案 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作为字典。