import Data.Complex
realPart :: (RealFloat a) => Complex a -> a
realPart (x :+ _) = x
imagPart :: (RealFloat a) => Complex a -> a
imagPart (_ :+ x) = x
这是我的代码,但是当我执行realPart 2:+3
时,它给出了2.0:+ 3.0作为输出,我只需要2作为输出。有没有办法得到它?
当我执行imagPart 2:+3
时,它会给出0.0:+ 3.0
作为我只需要3的输出。
答案 0 :(得分:11)
函数应用程序比任何中缀绑定得更紧密,包括:+
。因此,您拥有的内容被解析为(realPart 2) :+ 3
,只是2 :+ 3
(在realPart 2
中,2
被解释为复杂的Num
字面值,即2 :+ 0
)。
要防止这种情况发生,请使用parens或$
进行手动分组:realPart $ 2 :+ 3
将提供2。
答案 1 :(得分:6)
括号应该解决:
ghci> realPart (2:+3)
2.0
ghci> imagPart (2:+3)
3.0
如果不放括号,则表现如下:
ghci> (realPart 2) :+ 3
2.0 :+ 3.0