Haskell(带有GHC编译器)比您预期的要快得多。如果使用得当,它可以接近低级语言。(Haskellers最喜欢做的一件事是尝试在C语言的5%之内(甚至超过它,但这意味着你在使用一个低效的C程序,因为GHC将Haskell编译为C语言)。)我的问题是,为什么?

Haskell是声明性的,并且基于lambda演算。机器架构显然是必要的,大致上基于图灵机。事实上,Haskell甚至没有一个具体的评估顺序。此外,与处理机器数据类型不同,您一直都在使用代数数据类型。

最奇怪的是高阶函数。您可能会认为,动态地创建函数并将它们到处扔,会使程序变慢。但是使用高阶函数实际上使Haskell更快。实际上,为了优化Haskell代码,你需要让它更优雅和抽象,而不是更像机器。Haskell的任何高级特性如果不加以改进,似乎都不会影响它的性能。

抱歉,如果这听起来是废话,但这是我的问题:为什么Haskell(用GHC编译)这么快,考虑到它的抽象性质和与物理机器的差异?

注意:我之所以说C和其他命令式语言有点类似于图灵机(但没有到Haskell类似于Lambda Calculus的程度),是因为在命令式语言中,您有有限数量的状态(也就是行号),以及一个磁带(ram),这样状态和当前磁带就决定了对磁带做什么。关于从图灵机到计算机的转变,请参阅维基百科的条目,图灵机等价物。

Python 2文档说:

Built-in Functions: map(function, iterable, ...) Apply function to every item of iterable and return a list of the results. If additional iterable arguments are passed, function must take that many arguments and is applied to the items from all iterables in parallel. If one iterable is shorter than another it is assumed to be extended with None items. If function is None, the identity function is assumed; if there are multiple arguments, map() returns a list consisting of tuples containing the corresponding items from all iterables (a kind of transpose operation). The iterable arguments may be a sequence or any iterable object; the result is always a list.

它在笛卡尔积中起什么作用呢?

content = map(tuple, array)

把一个元组放在那里有什么影响?我还注意到,如果没有map函数,输出是abc,有了它,输出是abc。

我想完全理解这个函数。参考定义也很难理解。太多花哨的绒毛。