如何在控制台输出中为用户选择haskell中的列表?

时间:2011-05-27 13:55:50

标签: list haskell

嗨,我有一个问题,我有一个项目列表,为了一个简单的理解,我有一个[String]列表

现在有几个项目,但并非所有项目都在那里,所以我需要做一些事情:

  1. 在控制台中将列表打印到用户(使用map putStrLn list轻松)
  2. 我需要让用户选择应该使用/删除的项目,怎么做?
  3. 然后我可以处理所选项目并使用/删除它
  4. 我需要帮助才能做出选择。我不能使用GUI而只有控制台。

    有人有想法吗?

1 个答案:

答案 0 :(得分:1)

首先,我建议使用模块Text.Printf进行格式化。对于Data.Functor我们还需要<$>

import Text.Printf (printf)
import Data.Functor ((<$>))

打印出列表和一些索引:

putList = mapM (printf "%2d: %s\n") . zipWith [1..]

打印提示:

prompt = putStr "Enter a whitespace-separated list of entries to delete.\n> "

阅读指数:

readIndices = map read . words <$> getLine

获取过滤列表:

filtered ix = map snd . filter (flip notElem ix . fst) . zipWith [1..]

把块放在一起:

filterList ls = do putList ls
                   prompt
                   ix <- readIndices
                   return $! filtered ix ls

这就是全部!如果您有任何其他问题,请询问。