Haskell按顺序向元组/列表添加元素

Zee*_*eeV 0 haskell list

我已经定义了一个(String,Int)对的列表.

 type PatientList = [(String,Int)]
Run Code Online (Sandbox Code Playgroud)

我需要以'name'和'number'的形式将数据添加到此列表中,其中number将在列表的每个添加中递增,例如,添加3个名称后的列表(或元组)将如下所示:

 [("bob", 1), ("ted", 2), ("harry", 3)] 
Run Code Online (Sandbox Code Playgroud)

将使用以下代码捕获名称:

  do putStr "You are? "
  name <- getLine
Run Code Online (Sandbox Code Playgroud)

我目前的解决方案是创建一个名单列表,例如(bob,ted,harry),然后使用zip,将这些列表组合如下:

 zip = [1...]["bob","ted","harry"]
Run Code Online (Sandbox Code Playgroud)

此解决方案不符合我的要求,因为我希望在不同时间添加到列表中而不是组合在一起.我怎样才能做到这一点?

kyt*_*cka 5

以相反的顺序保持列表不是更好吗?

[("harry", 3), ("ted", 2), ("bob", 1)]
Run Code Online (Sandbox Code Playgroud)

比添加将在恒定时间:

add :: PatientList -> String -> PatientList
add [] newName = [newName]
add ((oldName, x):xs) newName = (newName, x+1):(oldName, x):xs
Run Code Online (Sandbox Code Playgroud)

当你需要整个列表的顺序,你只需在O(lenght yourList)线性时间:

reverse patientList
Run Code Online (Sandbox Code Playgroud)