1

この関数では:

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 の戻り値の型はブール値のリストである必要があるように見えますが、エラーがあるようです。これが非常に初心者の質問である場合は申し訳ありません。ありがとうございました

4

1 に答える 1

4

(++) は 2 つのリストを想定していますが、agent関数は bool を返すだけです。試す

play history agent1 agent2  = history ++ [agent1 history] ++ [agent2 history]

履歴にアイテムを保存する順序が重要でない場合は、(:) を使用する方が効率的です。つまり、

play history agent1 agent2  = agent1 history : agent2 history : history
于 2013-01-14T15:45:27.277 に答える