splitAt以这种方式在GHC中实现:
splitAt n xs = (take n xs, drop n xs)
那么,splitAt做了两倍的工作还是有一些幕后优化?
此外,take和drop生成递归过程.这是为什么.毕竟它们是图书馆的功能,美丽并不重要.为什么不实施它们来创建迭代过程?
Chris Taylor.. 14
您正在查看的定义是Haskell报告前奏定义.
从该页面引用(强调我的)
在本章中,给出了整个Haskell Prelude.它构成了前奏曲的规范.许多定义是以清晰而非效率的方式编写的,并且不要求如此处所示实现规范.
所以在GHC来源中,当你看到
#ifdef USE_REPORT_PRELUDE // Haskell report prelude definition here (inefficient) #else // Efficient definition here #endif
#else
如果要查看通常使用的定义,则应阅读分支 - 除非您特别要求Haskell报告定义.
您正在查看的定义是Haskell报告前奏定义.
从该页面引用(强调我的)
在本章中,给出了整个Haskell Prelude.它构成了前奏曲的规范.许多定义是以清晰而非效率的方式编写的,并且不要求如此处所示实现规范.
所以在GHC来源中,当你看到
#ifdef USE_REPORT_PRELUDE // Haskell report prelude definition here (inefficient) #else // Efficient definition here #endif
#else
如果要查看通常使用的定义,则应阅读分支 - 除非您特别要求Haskell报告定义.