第一次使用haskell并且我一直遇到这个问题:
Couldn't match expected type `([Char], b0)'
with actual type `[[Char]]'
In the first argument of `fst', namely `moves'
In the second argument of `rotatedMaze', namely `(fst moves)'
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚发生了什么.我的参数错误在哪里?
manyPlayersManyRotations :: [[Char]] -> [[Char]] -> [[Char]]
manyPlayersManyRotations maze moves =
if null moves
then maze
else
let
rmaze = rotatedMaze maze (fst moves)
drop1 = dropPlayer rmaze '1'
opor1 = (fst drop1, snd drop1)
drop2 = dropPlayer (fst opor1) '2'
opor2 = (fst drop2, snd opor2 || snd drop2)
drop3 = dropPlayer (fst opor2) '3'
opor3 = (fst drop3, snd opor2 || snd drop3)
drop4 = dropPlayer (fst opor3) '4'
opor4 = (fst drop4, snd opor2 || snd drop4)
in
if (not)(snd opor4)
then fst opor4
else manyPlayersManyRotations (fst opor4) (tail moves)
rotatedMaze :: [[Char]] -> [Char] -> [[Char]]
rotatedMaze maze move =
if move == ['c']
then rc maze
else if move == ['c','c']
then rcc maze
else r180 maze
Run Code Online (Sandbox Code Playgroud)
fst 想要一个元组,但你给了它一个列表.
类型fst是:
fst :: (a, b) -> a
Run Code Online (Sandbox Code Playgroud)
错误消息的第一行
Couldn't match expected type `([Char], b0)'
Run Code Online (Sandbox Code Playgroud)
说你的电话参数的预期类型fst是([Char], b0).该[Char]位是从上下文推断出来的,b0只是意味着它不关心第二种类型是什么(因为fst只丢弃第二个元组元素).
错误消息的第二行
with actual type `[[Char]]'
Run Code Online (Sandbox Code Playgroud)
说你过去了[[Char]],因为......好吧,那就是你所做的.
也许你不是意味着的fst就是head,它给一个列表的第一个元素.
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |