복소수에 대한 데이터 유형을 생성했으며이 데이터 유형에 대해 Num의 인스턴스를 작성하려고합니다. 내 쇼 기능에 필요하기 때문에 negate 줄을 추가하려고 시도했지만이 오류가 계속 발생합니다. "negate"는 데이터 생성자가 아닙니다.Num의 인스턴스를 생성 할 때 부정으로 오류가 발생했습니다.
instance Num Complex where
(C u v) + (C x y) = (C (u+x) (v+y))
(C u v) * (C x y) = (C (u*x) (-v*y)) + (C (v*x) (u*y))
(C u v) - (C x y) = (C (u+(-x)) (v+(-y)))
negate
abs (C x y) = C (root (x*x + y*y)) 0
signum (C x y) = if (x==0 && y==0) then 0 else 1
fromInteger n = C (fromInteger n) 0
가 무효화 라인에 어떤 도움 충전이 크게 감상 할 수있다 : 여기
은 인스턴스에 대한 코드입니다.
negate :: Num a => a -> a'는 인수의 '음수'값을 반환합니다. 어떻게 복소수를 무효화합니까? 즉,'x + iy'를 가지고 있다면'u'와'v'의 값은'x + iy + u + iv = 0' 일 필요가 있습니까? –
몇 가지주의 사항 :'u + (- x)'대신'u-x' 만 쓰는게 어떨까요? 곱셈은 조금 더 조밀하게 쓰여질 수도 있습니다. - '내 쇼 기능에 필수적이기 때문에 부정 라인을 추가하려고했습니다.'- 당신이 의미하는 바를 모르겠지만 뭔가 잘못 생각한 것 같습니다. 쇼 기능과 관련이있는 것은 무엇입니까? -'signum' (일반적으로 복소수에 대해서는 정의되지 않음)은 다른 모든 함수와 마찬가지로 실수로 축소 될 때 실제 버전과 동일해야합니다. 즉,'signum (-π)'은'- 1 '이 아니라 1입니다. – leftaroundabout
@leftaroundabout 나는이 비트들을 정리할 것입니다. 처음에 그것을 썼습니다. 더 좋은 방법으로 복소수를 출력하는 쇼 함수를 작성했습니다. 예 : 내가 일하려고하는 선은'show (C a (-b)) = "("++ show a ++ "-"++ show b ++ "i)"'이 물건의 이유는 궁극적으로 복소수의 다항식을 풀 수 있습니다. – edept