Function 哈斯克尔的第三个论证
我在寻找某种抑制科学符号的方法(每个程序员在某个时候都要面对的斗争),我发现了这个问题: 第一个答案是这样的:Function 哈斯克尔的第三个论证,function,haskell,Function,Haskell,我在寻找某种抑制科学符号的方法(每个程序员在某个时候都要面对的斗争),我发现了这个问题: 第一个答案是这样的: showFullPrecision x = showFFloat Nothing x "" 这是可行的,但我不知道最后一个参数是什么,我不想盲目地使用代码 showFFloat的文档说明它的签名是showFFloat::RealFloat a=>Maybe Int->a->ShowS。接受一个可能是Int,很可能是一个float,但是最后一个参数(在我们的例子中是一个空字符串)出了
showFullPrecision x = showFFloat Nothing x ""
这是可行的,但我不知道最后一个参数是什么,我不想盲目地使用代码
showFFloat
的文档说明它的签名是showFFloat::RealFloat a=>Maybe Int->a->ShowS
。接受一个可能是Int,很可能是一个float,但是最后一个参数(在我们的例子中是一个空字符串)出了什么问题呢?显示的
与数字显示没有任何关系,这只是类似显示的函数的正常结果。从道德上讲,表明
只是一个字符串。改用的理由
type ShowS = String -> String
是不是String
在级联方面的性能很差,特别是在执行以下操作时
s0, s1, s2, s3, s4 :: String
(((s0 ++ s1) ++ s2) ++ s3) ++ s4
然后,每个++
运算符都需要遍历其左侧已连接的所有字符串,从而产生二次时间复杂性–非常慢
奥托,带着
(s0++), (s1++), (s2++), (s3++), (s4++) :: ShowS
((((s0++) . (s1++)) . (s2++)) . (s3++)) . (s4++)
运行时只是将函数组合在一起,这是固定成本。要实际计算连接,您将最终将此链应用于空字符串,如示例中所示:
( ((((s0++) . (s1++)) . (s2++)) . (s3++)) . (s4++) ) ""
= s0++(s1++(s2++(s3++(s4++""))))
= s0++s1++s2++s3++s4
因此,生成可能仍将与其他字符串组合的字符串的函数更倾向于生成此类差异列表字符串,而不是直接生成string
。但是,如果您只是想查看这样一个显示的字符串,您需要做的是始终将其应用于”
顺便说一句,如果您想要更灵活的showFFloat
,我建议使用。谢谢!秀秀是。。。基本上是一个内部表示的字符串,它可以应用于空字符串“
”,就像一个函数一样,以获取底层的字符串
?另外,如果将其应用于非空字符串,会发生什么情况?如果将其应用于某个非空字符串,则只会将该字符串返回,并附加到显示结果中。