В настоящее время я работаю над оценщиком доски в haskell. Я пытаюсь использовать карту с функцией с несколькими параметрами; Я прочитал другие вопросы SO, касающиеся этого, но продолжаю получать ошибки типа, поэтому, возможно, я просто недопонимаю типы Haskell (я программист на Python). В любом случае, вот код:Карта Haskell с несколькими параметрами и проблемами типа
scorePiecesRow [] _ = 0
scorePiecesRow (x:xs) y
| x == y = 1 + (scorePiecesRow xs y)
| x == '-' = 0 + (scorePiecesRow xs y)
| otherwise = -1 + (scorePiecesRow xs y)
scorePieces [] _ = 0
scorePieces board y = foldr (+) 0 (map (scorePiecesRow y) board)
scorePiecesRow
работает нормально, когда я прохожу это ничего подобного "wwwb--" 'w'
(который возвращает 3
), но как только я называю scorePieces
(например scorePieces ["www", "bb-"] 'w'
, который должен вернуть 1
), я получаю куча ошибок типа:
<interactive>:37:14: Couldn't match expected type `Char' with actual type `[Char]' In the expression: "www" In the first argument of `scorePieces', namely `["www", "bb-"]' In the expression: scorePieces ["www", "bb-"] 'w' <interactive>:37:21: Couldn't match expected type `Char' with actual type `[Char]' In the expression: "bb-" In the first argument of `scorePieces', namely `["www", "bb-"]' In the expression: scorePieces ["www", "bb-"] 'w' <interactive>:37:28: Couldn't match expected type `[Char]' with actual type `Char' In the second argument of `scorePieces', namely 'w' In the expression: scorePieces ["www", "bb-"] 'w' In an equation for `it': it = scorePieces ["www", "bb-"] 'w'
Я немного запутываемый сообщения об ошибках. Первый говорит мне, например, что он ожидает Char
, но первый аргумент scorePiecesRow
принимает [Char]
. Если бы кто-нибудь мог пролить свет на это, было бы очень полезно!
А ... это имеет большой смысл! Спасибо, что потратили время на то, чтобы пройти через это так тщательно - эта штука совпадения скоро будет привыкать :) – mondayRain