test' x y n = n
будет соответствовать для каждого вызова, другие шаблоны не будут рассматриваться.Я думаю, что этот случай должен быть test' "" "" n = n
.Вы получите тот же результат, если переместите исходную строку на end (когда все другие случаи не пройдены), но тогда вам следует написать test' _ _ n = n
, что показывает, что вы намеренно игнорировали некоторые аргументы.
[Редактировать]
Более короткое решение было бы:
test a b | length a == length b = sum $ map fromEnum $ zipWith (/=) a b
| otherwise = error "error"
Выражение zipWith
создает список Bool
, который равен True
за каждую разницу.Функция fromEnum
отображает False
на 0
и True
на 1
.