2011-05-27 42 views
0

您好,我有一个问题,我有一个项目清单,一个简单的了解,我有一个[String]列表如何在控制台输出中为用户选择haskell中的列表?

现在有几个项目,但不是所有的项目应该在那里,所以我需要做一些事情:

  1. 打印列表,在控制台(容易map putStrLn list)用户
  2. 我需要让用户选择应该使用/删除的项目,如何做到这一点?
  3. 然后我可以在选定的项目和使用工作/删除

我需要帮助做选择。我不能使用GUI,只有控制台。

有人想法吗?

+3

你问如何设计一个用户界面?只需对这些字符串进行编号,打印出来,然后让用户选择一个数字。 – augustss 2011-05-27 14:08:44

+2

这个问题太过于开放和模棱两可以值得。您需要使用类似'getLine'的方式从用户那里获得输入,处理输入和数据列表,然后根据需要重复。大多数这并不困难,但如果不知道自己已经完成了什么,并且想要完成什么更具体的问题,就无法提供帮助。 – 2011-05-27 14:31:01

+2

您需要更详细地说明您正在解决的问题。例如在界面中,用户是应该逐个删除一个元素,还是只在一行写入多个索引?像这样的问题在开始编码之前应该是明确的(对于任何语言!)。 – Tarrasch 2011-05-27 14:36:12

回答

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 

这一切!如果您还有其他问题,请询问。

相关问题