我正在测试 Python 和 Haskell 的代码密度。所以我决定编写一个程序来求解 ax^2+bx+c=0 形式的方程,其中 a<>0。在 Python 中,这需要五行:
import cmath
def secondgrade(a,b,c):
d=b**2-4*a*c
return ((-b+cmath.sqrt(d))/2*a,(-b-cmath.sqrt(d))/2*a)
在 Haskell 中,它应该更简洁,更少冗长,我花了 12 行:
import Data.Complex
csqrt :: Double->Complex Double
csqrt a = if a<0 then 0.0 :+ sqrt(abs(a)) else sqrt(a) :+ 0.0
secondgrade :: Double->Double->Double->(Complex Double,Complex Double)
secondgrade a b c = let d = b^2 - 4*a*c
denominator=2*a :+ 0
b'=(-b) :+ 0
solution1=b'+(csqrt d)
solution2=b'-(csqrt d)
in (solution1/denominator,solution2/denominator)
有没有行数更少且不失可读性的解决方案?