myodd :: Integer -> Bool
myodd = rem n 2 == 1
내가 생각 나는이 같은 .. 어딘가에 복근을 배치하면 작동합니다 :
myodd :: Integer -> Bool
myodd = rem (abs(n)) 2 == 1
하지만 음수를 배치 할 때 난 여전히 오류가 나는 내가 할 수있는 다른 모르겠어요 ..
을 ... 뉴욕 아이디어는 매우 높이 평가 될 것입니다 :)
myodd :: Integer -> Bool
myodd = rem n 2 == 1
내가 생각 나는이 같은 .. 어딘가에 복근을 배치하면 작동합니다 :
myodd :: Integer -> Bool
myodd = rem (abs(n)) 2 == 1
하지만 음수를 배치 할 때 난 여전히 오류가 나는 내가 할 수있는 다른 모르겠어요 ..
을 ... 뉴욕 아이디어는 매우 높이 평가 될 것입니다 :)
작성한대로 코드는 컴파일되지 않습니다. ::
에는 형식이 아닌 표현식이 와야하고 (어쨌든 앞 줄에 형식 서명을 부여 했으므로) myodd :: rem (abs(n)) 2 == 1
은 유효한 구문이 아니며 어느 것도 myodd :: rem n 2 == 1
이 아닙니다. myodd
을 정의하려면 =
를 사용해야하고 본문에 n
를 사용하기 때문에 당신은 그것을 n
라는 이름의 매개 변수를 제공해야합니다 :
myodd :: Integer -> Bool
myodd n = rem (abs(n)) 2 == 1
지금이 코드를 컴파일하고 사용자가 원하는 정확히처럼 작동합니다. 음수로 호출하면 런타임 오류가 발생하지 않습니다.
rem 함수는 결과의 부호를 변경하지 않으므로 음수로 시작하면 음수를 다시 얻습니다. 양수 만 얻으려면 수학 함수를 사용하여 수학적으로 올바른 모듈을 계산하십시오.
>>> (-3) `rem` 4
-3
>>> (-3) `mod` 4
1
사실이지만, OP의 'abs'사용법은 완벽하게 잘 작동합니다. – sepp2k
오류 메시지가 무엇인가요? –
실제 코드를 게시하십시오. 게시 한 코드는 컴파일되지 않으므로 양수 또는 음수로 작동하지 않습니다. – interjay
편집 후에도 코드가 컴파일되지 않습니다. 게시하기 전에 코드를 테스트하십시오! 그리고 여전히 오류 메시지를 게시하지 않았습니다. 내가 줄 -1 다음과 같은 오류를 반환 – interjay