Как объединить две функции в одну в Haskell - PullRequest
0 голосов
/ 04 апреля 2019

Я хочу объединить две функции в одну.

Функции:

 data Dice = Stone Char deriving (Show, Eq)

 calculateScore :: [Dobbelsteen]  -> Int
 calculateScore xs = sum[giveValueDice x | x <- xs]

 giveValueDice :: Dice -> Int
 giveValueDice (Stone d) = if d == 'W' then 5 else digitToInt d

Обычно, я просто скопировал бы одну строку в первую функцию и изменил бы немного, чтобы сделатьсинтаксис правильный.Но вот я как-то заблудился, как это сделать

1 Ответ

4 голосов
/ 04 апреля 2019

Как вы уже заметили, вы не можете просто встроить сюда; причина в том, что вы сопоставляете шаблон с Stone в giveValueDice. Это сопоставление с образцом может быть перемещено в правую часть списка понимания:

 calculateScore :: [Dobbelsteen]  -> Int
 calculateScore xs = sum[if d == 'W' then 5 else digitToInt d | (Stone d) <- xs]

Другим методом объединения этих двух функций является использование предложения where, которое «сливает» одну функцию в другую, сохраняя при этом их различие:

 calculateScore :: [Dobbelsteen]  -> Int
 calculateScore xs = sum[giveValueDice x | x <- xs]
   where
     giveValueDice :: Dice -> Int
     giveValueDice (Stone d) = if d == 'W' then 5 else digitToInt d
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...