向元组添加“值”

Dan*_*Dan -2 haskell

我试图将更多“数据”添加到玩家数据库中,但我得到了一些意想不到的结果:

数据类型声明:

data Player= Player teamName player goals
    deriving (Show, Read)
type teamName = String
type player = String
type goals = [Int]
Run Code Online (Sandbox Code Playgroud)
db :: [Players]
db = [
 Player "Bayern" "Lewandowski" [3, 52, 16, 3],
 Player "Tottenham" "Kane" [11, 31, 3, 2]
]
Run Code Online (Sandbox Code Playgroud)

我用来向数据库添加新玩家的代码。

addPlayer :: Player -> [Players] -> [Players]
addPlayer playerInfo database = database++[playerInfo]
Run Code Online (Sandbox Code Playgroud)

用于显示给定数据库中的所有玩家:

showAllPlayers :: [Players] -> String
showAllPlayers [] =""
showAllPlayers [x] = getPlayer x
showAllPlayers (x:xs) = getPlayer x ++ "\n" ++ showAllPlayers xs
Run Code Online (Sandbox Code Playgroud)

当尝试运行该行时,addPlayer(Player "Man UTD" "Rooney" [5, 6, 2, 11]) db)它一切正常,并且在控制台中它说已添加了该行。输出: [Player "Bayern" "Lewandowski" [3, 52, 16, 3],Player "Tottenham" "Kane" [11, 31, 3, 2],Player "Man UTD" "Rooney" [5, 6, 2, 11]]

但是当我运行代码输出所有玩家时putStrnLn(showAllPlayers data),我尝试添加的玩家不在列表中?

Dan*_*ner 6

addPlayers不修改其数据库参数;相反,它返回一个更新的数据库。所以正确的调用是:

putStrLn (showAllPlayers (addPlayer (Player "Man UTD" "Rooney" [5, 6, 2, 11]) db))
Run Code Online (Sandbox Code Playgroud)