2011-05-27 39 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 

這一切!如果您還有其他問題,請詢問。

相關問題