Функция для проверки, может ли глава списка быть разделена вторым элементом списков

#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. Большое спасибо, что нашли время ответить! Теперь это работает!