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

List 如何让用户在控制台输出中选择haskell中的列表?,list,haskell,List,Haskell,您好,我有一个问题,我有一个项目列表,为了简单理解,我有一个[String]列表 现在有几个项目,但不是所有项目都应该在那里,所以我需要做一些事情: 在控制台中将列表打印给用户(使用映射putStrLn list很容易) 我需要让用户选择应该使用/删除的项目,怎么做 然后我可以处理所选项目并使用/删除它 我需要帮助做选择。我不能使用GUI,只有控制台 有人有想法吗?首先,我建议使用模块Text.Printf进行格式化。对于,我们还需要数据.Functor: 打印提示: prompt = putS

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

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

  • 在控制台中将列表打印给用户(使用
    映射putStrLn list
    很容易)
  • 我需要让用户选择应该使用/删除的项目,怎么做
  • 然后我可以处理所选项目并使用/删除它
  • 我需要帮助做选择。我不能使用GUI,只有控制台


    有人有想法吗?

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

    打印提示:

    prompt = putStr "Enter a whitespace-separated list of entries to delete.\n> "
    
    读入索引:

    putList = mapM (printf "%2d: %s\n") . zipWith [1..]
    
    readIndices = map read . words <$> getLine
    
    然后把这些块放在一起:

    filterList ls = do putList ls
                       prompt
                       ix <- readIndices
                       return $! filtered ix ls
    
    filterList ls=do putList ls
    促使
    
    你在问如何设计用户界面吗?只需对字符串进行编号、打印,然后让用户选择一个数字。这个问题过于开放和模糊,不值得考虑。您需要使用类似于
    getLine
    的方法从用户那里获取输入,处理输入和数据列表,然后根据需要重复。这其中大部分并不困难,但是如果不知道你已经做了什么,并且没有一个关于你想要完成什么的更具体的问题,你就不可能提供帮助。你需要对你正在解决的问题有一个更详细的说明。例如,在界面中,用户应该逐个删除一个元素,还是只在一行中写入多个索引?在开始编写代码之前(对于任何语言!),这样的问题都应该是明确的。
    filtered ix = map snd . filter (flip notElem ix . fst) . zipWith [1..]
    
    filterList ls = do putList ls
                       prompt
                       ix <- readIndices
                       return $! filtered ix ls