gpt4 book ai didi

function - Haskell showFFloat 的第三个参数

转载 作者:行者123 更新时间:2023-12-02 03:35:38 25 4
gpt4 key购买 nike

我正在寻找某种方法来抑制科学记数法(每个程序员在某些时候都必须处理的难题),我发现了这个问题:

Haskell - how to avoid scientific notation in decimal output

现在,第一个答案使用如下内容:

showFullPrecision x = showFFloat Nothing x ""

这可行,但我无法弄清楚最后一个参数是什么,而且我不想盲目地使用代码。

showFFloat 的文档说它的签名是 showFFloat :: RealFloat a => Maybe Int -> a -> ShowS 。接受Maybe Int很可能是一个 float ,但是最后一个参数(在我们的例子中是一个空字符串)怎么了?

最佳答案

ShowS 与具体的数字显示完全无关,这只是类似显示函数的正常结果。从道德上讲,ShowS 只是一个字符串。使用的原因

type ShowS = String -> String

String 的连接性能很差,特别是如果您执行类似的操作

s0, s1, s2, s3, s4 :: String

(((s0 ++ s1) ++ s2) ++ s3) ++ s4

然后每个 ++ 运算符都需要遍历其左侧的所有已连接的字符串,从而产生二次时间复杂度 - 非常慢!

OTOH,与

(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。但如果您只想查看这样一个显示的字符串,您需要做的就是始终将其应用于""

关于function - Haskell showFFloat 的第三个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50311168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com