Tag: 高阶函数

如何使用ES6胖箭头.filter()对象数组

我试图使用ES6箭头函数与.filter返回成年人(杰克和吉尔)。 看来我不能使用if语句。 我需要知道什么才能在ES6中做到这一点? var family = [{"name":"Jack", "age": 26}, {"name":"Jill", "age": 22}, {"name":"James", "age": 5 }, {"name":"Jenny", "age": 2 }]; let adults = family.filter(person => if (person.age > 18) person); // throws error (8:37) SyntaxError: unknown: Unexpected token (8:37) |let adults = family.filter(person => if (person.age > 18) person); 我工作的ES5的例子: let adults2 = family.filter(function (person) […]

为什么Haskell(GHC)如此快速?

Haskell(与GHC编译器) 比你想象的要快很多 。 正确使用,它可以接近低级语言。 (Haskellers最喜欢的做法是尝试在C的5%以内(甚至可以打败它,但这意味着你正在使用一个低效的C程序,因为GHC把C编译成Haskell)。我的问题是,为什么? Haskell是声明式的,基于lambda演算。 机器体系结构显然是必不可less的,大致基于图灵机。 事实上,Haskell甚至没有具体的评估顺序。 另外,不用处理机器数据types,而是始终创build代数数据types。 最奇怪的是高阶function。 你可能会认为,即时创build函数并将其扔掉,会使程序变慢。 但是使用更高阶的函数实际上使得Haskell更快。 实际上,它似乎优化了Haskell代码,您需要使其更加优雅和抽象,而不是更像机器。 如果Haskell的更高级的function没有改进,那么它的性能甚至都不会影响它的性能。 对不起,如果这听起来简单,但这里是我的问题: 为什么Haskell(与GHC编译)如此之快,考虑到其抽象的性质和与物理机器的差异? 注意:我说C语言和其他命令式语言的原因有点类似于图灵机(但是不像Haskell类似于Lambda微积分),在命令式语言中,有一个有限数量的状态(又称行号) ,以及一个磁带(公羊),这样的状态和当前磁带决定如何做磁带。 请参阅维基百科条目, 图灵机等价物 ,以便从图灵机转换到计算机。

在Scala中foldLeft和reduceLeft之间的区别

我学到了foldLeft和reduceLeft的基本区别 foldLeft: 初始值必须通过 reduceLeft: 将集合的第一个元素作为初始值 抛出exception,如果收集是空的 还有其他的区别吗? 有两个具有相似function的方法的具体原因?