하스켈을 배우는 동안 주어진 숫자의 모든 제수 약수를 반환하는 함수를 사용해야합니다. 그래서 두 개의 중첩 된 where
절을 사용하여 만들었지 만 작동하지 않습니다. exs2.hs:49:24: Parse error in pattern: negRef/2
Haskell에서 중첩 된`where` 절 사용
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
내부 where 절이 div 정의에서 두 번째 행의 범위에만 있습니다. divs의 첫 번째 행에서 negDiv를 호출하면 내부 where 절이 범위에 없습니다. 그것과 패턴 것. – pigworker
그러면 어떻게 그 구분 패턴을 올바르게 쓸 수 있습니까? @MathematicalOrchid – fant0me