在此功能中:
play :: [Bool] -> ([Bool] -> Bool) -> ([Bool] -> Bool) -> [Bool]
play history agent1 agent2 = history ++ (agent1 history) ++ (agent2 history)
其中一个代理人可能是:
titForTat :: [Bool] -> Bool
titForTat history
| last history = True
| otherwise = False
我收到错误:
Couldn't match expected type `[Bool]' with actual type `Bool'
In the return type of a call of `agent1'
In the first argument of `(++)', namely `(agent1 history)'
In the second argument of `(++)', namely
`(agent1 history) ++ (agent2 history)'
在我看来,agent1的返回类型应该是布尔列表,但似乎有错误。如果这是一个非常初学的问题,我很抱歉。谢谢
答案 0 :(得分:4)
(++)需要两个列表,但是你的agent
函数只返回一个bool。尝试
play history agent1 agent2 = history ++ [agent1 history] ++ [agent2 history]
如果您在历史记录中存储项目的顺序无关紧要,使用(:)会更有效,即
play history agent1 agent2 = agent1 history : agent2 history : history