我想弄清楚第500个斐波纳契数是多少位数:
fib n = fibs (0,1) !! n where
fibs (a,b) = a:fibs(b,(a+b))
length (show (fib 500))
这确实有效。有没有办法摆脱第三行的括号?说
length . show . fib 500
或类似的东西?
这种美元形式也有效:
length $ show $ fib 500
一般来说,在这种情况下推荐的方式是什么?
答案 0 :(得分:10)
典型风格:
length . show $ fib 500
只有作品:
length . show . fib $ 500
优选组合的一个优点是您可以轻松地提取常见的子功能。也许你需要在其他地方length . show
,所以你可以轻易地将它移到其他地方并给它一个名字;但是,show . fib
可能没那么有用。 :)
你说的话:
length . show . fib 500
与:
相同\x -> length (show (fib 500)) x
编译器认为这是荒谬的,因为你像函数一样使用Int
。
答案 1 :(得分:5)
你几乎得到了它:
length . show . fib $ 500
您可以在pointless style中为此
定义一项功能lengthOfFib = length . show . fib
然后像这样使用它
lengthOfFib 500
答案 2 :(得分:3)
我通常会使用圆点来组成除最后一个之外的所有函数。例如:
length . show $ fib 500
this . that . theOther . length . show $ fib 500
你也可以把它写成:
(length . show . fib) 500
(this . that . theOther . length . show . fib) 500