#haskell
#haskell
Вопрос:
У меня есть этот фрагмент кода, который должен проверять, можно ли разделить первый элемент массива на второй. Уже некоторое время пытаюсь найти решение, так как после компиляции я получаю эту ошибку:
Parse error (line 2, column 22): parse error (possibly incorrect indentation or mismatched brackets)
Отступы меня сбивают с толку, поскольку я новичок в Haskell, буду признателен за любую помощь в определении того, что мне здесь делать
fst2Div:: [a] -> Bool
fst2Div (x : y : _) =
case theList of (x:_:_) -> x
(_:y:_) -> y
if (y `mod` x)==0 then True
else False
Комментарии:
1.
x
иy
уже находятся в области видимости по(x : y : _)
шаблону.
Ответ №1:
x
и y
уже находятся в области видимости по (x : y : _)
шаблону. Нет необходимости использовать дополнительное case … of …
выражение. Здесь это все равно не сработает, поскольку case … of …
выражение вернет либо x
или y
. Кроме theList
того, не определено.
Подпись, кроме того, является общей. a
может быть любого типа. Но вы можете вычислить только mod :: Integral a => a -> a -> a
для Integral
типа. Таким образом, вы можете работать с x
и y
directy с:
fst2Div:: Integral a => [a] -> Bool
fst2Div (x : y : _) = y `mod` x == 0
fst2Div _ = False
Второе предложение объединяет списки, содержащие менее двух элементов. В этом случае мы возвращаемся False
.
Комментарии:
1. Большое спасибо, что нашли время ответить! Теперь это работает!