При изучении Haskell я должен выполнить функцию, чтобы возвращать все целые числа чисел заданного числа. Итак, я создал его, используя два вложенных предложения where
, но это не сработает.Использование вложенных предложений `where` в Haskell
Ошибка возвращается: exs2.hs:49:24: Parse error in pattern: negRef/2
divisors' :: (Integral a) => a -> [a]
divisors' x = divs x (x/2) [x]
where
divs ref 1 list = negDiv (-ref) (-2) ((-1):1:list)
divs ref num list = if (mod ref num == 0) then divs ref (num-1) (num:list) else divs ref (num-1) list
where
negDiv negRef (negRef/2) negList = (negRef:(negRef/2):negList)
negDiv negRef negNum negList = if (mod negRef negNum == 0) then negDiv (negNum-1) (negNum:negList) else negDiv (negNum-1) negList
Что неправильно, что тогда? Кажется, он хорошо отстут.
'negRef/2' неправильный шаблон. – MathematicalOrchid
Предложение inner where доступно только для второй строки в определении div. Когда первая строка divs вызывает negDiv, предложение inner where не имеет значения. Это и образец. – pigworker
Тогда как я мог правильно написать этот шаблон разделения? @MathematicsOrchid – fant0me