标签: functional-programming

何时使用函数式编程语言?

在哪种情况下,我应该选择使用函数式编程语言而不是更简洁的面向对象语言,如C++,C#或Java?

我理解什么是函数式编程,我真正理解的是什么类型的问题是一个完美的解决方案?

language-agnostic functional-programming

81
推荐指数
4
解决办法
5万
查看次数

为什么我可以在C++中定义函数内的结构和类?

我只是在C++中错误地做了类似的事情,并且它有效.我为什么要这样做?

int main(int argc, char** argv) {
    struct MyStruct
    {
      int somevalue;
    };

    MyStruct s;
    s.somevalue = 5;
}
Run Code Online (Sandbox Code Playgroud)

在做完这个之后,我记得很久以前在某个地方读过这个技巧,作为一种穷人用于C++的函数式编程工具,但我不记得为什么这个有效,或者我读到它.

欢迎回答任何一个问题!

注意:虽然在写这个问题时我没有得到任何关于这个问题的引用,但是当前的侧边栏指出了它,所以我会把它放在这里供参考,无论哪种方式问题都不同但可能有用.

c++ functional-programming data-structures

81
推荐指数
5
解决办法
6万
查看次数

如何在列表中压缩列表

我想压缩以下列表列表:

>>> zip([[1,2], [3,4], [5,6]])
[[1,3,5], [2,4,6]]
Run Code Online (Sandbox Code Playgroud)

zip只有将列表拆分为单个组件时,才能通过当前实现实现此目的:

>>> zip([1,2], [3,4], [5,6])
   (1, 3, 5), (2, 4, 6)]
Run Code Online (Sandbox Code Playgroud)

无法弄清楚如何拆分列表并将各个元素传递给zip.功能性溶液是优选的.

python functional-programming

81
推荐指数
1
解决办法
5万
查看次数

类型MonadPlus,Alternative和Monoid之间的区别?

标准库的Haskell类型类MonadPlus,Alternative以及Monoid各自提供两种方法具有基本相同的语义:

  • 空值:mzero,emptymempty.
  • 操作员a -> a -> a,在类型类联接值加在一起:mplus,<|>mappend.

所有这三个都规定了应遵守的法律:

mempty `mappend` x = x
x `mappend` mempty = x
Run Code Online (Sandbox Code Playgroud)

因此,似乎三个类型都提供相同的方法.

(Alternative也提供somemany,但它们的默认定义通常是足够的,所以它们在这个问题上并不太重要.)

所以,我的疑问是:为什么这三个极为相似的类?除了不同的超类限制之外,它们之间是否有任何真正的区别?

haskell functional-programming typeclass applicative monoids

80
推荐指数
1
解决办法
5625
查看次数

任何人都可以解释Monads吗?

可能重复:
什么是monad?

我想我明白'也许莫纳德'是什么,但我不确定其他类型.

monads glossary haskell functional-programming

79
推荐指数
0
解决办法
1万
查看次数

在折叠中早期中止

什么是提前终止折扣的最佳方式?作为一个简化的例子,想象一下,我想总结一下数字Iterable,但如果我遇到一些我不期望的东西(比如一个奇数),我可能想要终止.这是第一个近似值

def sumEvenNumbers(nums: Iterable[Int]): Option[Int] = {
  nums.foldLeft (Some(0): Option[Int]) {
    case (Some(s), n) if n % 2 == 0 => Some(s + n)
    case _ => None
  }
}
Run Code Online (Sandbox Code Playgroud)

然而,这个解决方案非常难看(如果我做了.foreach和返回 - 它会更清晰和更清晰),最糟糕的是,它遍历整个迭代,即使它遇到非偶数.

那么编写像这样的折叠最好的方法是什么呢?我应该去递归地写这个,还是有一个更被接受的方式?

functional-programming scala

79
推荐指数
6
解决办法
2万
查看次数

你能解释一下闭包(因为它们与Python有关)吗?

我一直在阅读很多关于闭包的内容,我认为我理解它们,但是没有为自己和他人蒙上阴影,我希望有人可以尽可能简洁明了地解释闭包.我正在寻找一个简单的解释,可以帮助我理解我想要使用它们的地点和原因.

python closures functional-programming

78
推荐指数
6
解决办法
1万
查看次数

Mathematica:什么是符号编程?

我是斯蒂芬·沃尔夫勒姆(Stephen Wolfram)的忠实粉丝,但他绝对不会羞于吹响自己的号角.在许多参考文献中,他将Mathematica称为不同的符号编程范例.我不是Mathematica用户.

My questions are: what is this symbolic programming? And how does it compare to functional languages (such as Haskell)?

haskell programming-languages functional-programming wolfram-mathematica

78
推荐指数
4
解决办法
2万
查看次数

功能性镜片

有人可以向我解释功能性镜片吗?谷歌这是一个令人惊讶的困难主题,我没有取得任何进展.我所知道的是,它们提供了类似于OO的获取/设置功能.

haskell functional-programming lenses

78
推荐指数
2
解决办法
1万
查看次数

使用Underscore.js以块的形式拆分JavaScript数组

我需要将JavaScript数组拆分为n大小的块.

例如:给定这个数组

["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13"]
Run Code Online (Sandbox Code Playgroud)

和a n等于4,输出应为:

[ ["a1", "a2", "a3", "a4"],
  ["a5", "a6", "a7", "a8"],
  ["a9", "a10", "a11", "a12"],
  ["a13"]
]
Run Code Online (Sandbox Code Playgroud)

我知道这个问题的纯JavaScript 解决方案,但由于我已经在使用Underscore.js,我想知道下划线是否为此提供了更好的解决方案.

编辑:

我创建了一个jsPerf测试来检查下划线解决方案的速度有多慢.

javascript split functional-programming underscore.js lodash

78
推荐指数
4
解决办法
5万
查看次数