PythonとHaskellのコード密度をテストしています。そこで、ax ^ 2 + bx + c=0の形式の方程式を解くプログラムを書くことにしました。ここでa<>0です。Pythonでは、これには5行かかります。
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)
行数が少なく、読みやすさを損なうことのないソリューションはありますか?