~cpp
roots a b c =
let
det = sqrt(b*b - 4*a*c)
twice_a = 2 * a
in ((-b+det)/twice_a,
(-b+det)/twice_a)
minint val =
let
rnd = round (fst (roots 1.0 1.0 (-2*val) ) )
in
(rnd, toRational (rnd*(rnd+1))/2)
1~N 까지 합 구하는 부분을
~cpp
mysum 1 = 1
mysum n = n + mysum (n-1)
로 정의했다가 이전에 작성했던데로 gauss 의 방법을 이용하여,
~cpp
mysum n = n * (n+1) / 2
로 바꾸었더니 type error가 났다. 이유인즉,
~cpp
rnd = round (fst (roots 1.0 1.0 (-2*val) ) )
에서 rnd의 타입이 Integer로 되었는데 Integer는 다른 값으로 나눠지지 않았다(내가 방법을 모르고 있을수도 있겠지만). haskell wiki를 뒤져 toRational 이라는 함수를 찾았지만 출력되는 모양이 영 마음에 들지 않는다.