Questions tagged «functional-programming»

函数式编程是一种基于使用函数构建抽象,避免副作用和状态改变的编程范例。纯函数式编程是线程安全的。


1
MonadPlus,Alternative和Monoid类型类之间的区别?
标准库的Haskell类型类MonadPlus,Alternative以及Monoid各自提供两种方法具有基本相同的语义: 空值:mzero,empty或mempty。 操作a -> a -> a:在该类型类联接值加在一起mplus,<|>或mappend。 这三个规则均指定了实例应遵循的以下法律: mempty `mappend` x = x x `mappend` mempty = x 因此,似乎三个类型类都提供相同的方法。 (Alternative也提供some和many,但是它们的默认定义通常就足够了,因此,在这个问题上它们并不是太重要。) 所以,我的查询是:为什么这三个类非常相似?除了它们不同的超类约束之外,它们之间是否还有真正的区别?

3
假人的递归方案?
我正在寻找一些非常简单,易于掌握的递归方案和核心递归方案(催化变形,变形,同形等)的解释,它们不需要遵循大量的链接或打开类别理论教科书。我敢肯定,我在不知不觉中重塑了许多这样的方案,并在编码过程中将它们“应用”到了我的脑海中(我相信我们中的许多人都有),但是我不知道我的(共)递归方案是什么。使用被称为。(好的,我撒谎了。我只是在阅读其中的一些内容,这引发了这个问题。但是在今天之前,我还没有头绪。) 我认为这些概念在编程社区中的传播受到了人们可能会遇到的令人难以理解的解释和示例的阻碍,例如,在Wikipedia上以及在其他地方。 他们的名字也可能阻碍了它。我认为还有一些其他的数学名称较少(关于香蕉和铁丝网的东西?),但我也不知道我使用的递归方案的更可爱的名称是什么。 我认为使用示例数据类型代表简单的实际问题,而不是抽象数据类型(例如二叉树)会有所帮助。

5
使用Lodash将JavaScript数组拆分为多个块
我需要将一个JavaScript数组拆分成多个n大小的块。 例如:鉴于此数组 ["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13"] 和n等于4,输出应该是这样的: [ ["a1", "a2", "a3", "a4"], ["a5", "a6", "a7", "a8"], ["a9", "a10", "a11", "a12"], ["a13"] ] 我知道有解决此问题的纯JavaScript解决方案,但是由于我已经在使用Lodash,所以我想知道Lodash是否可以为此提供更好的解决方案。 编辑: 我创建了一个jsPerf测试来检查下划线解决方案的速度。


13
python中的功能管道,例如R的magritrr中的%>%
在R中(感谢magritrr),您现在可以通过通过更实用的管道语法执行操作%>%。这意味着无需编码: > as.Date("2014-01-01") > as.character((sqrt(12)^2) 您也可以这样做: > "2014-01-01" %>% as.Date > 12 %>% sqrt %>% .^2 %>% as.character 对我来说,这更具可读性,并且扩展到数据框之外的用例。python语言是否支持类似功能?

5
Scala currying与部分应用函数
我意识到这里有几个关于什么是currying和部分应用的函数的问题,但是我在问它们有什么不同。作为一个简单的示例,这是一个用于查找偶数的咖喱函数: def filter(xs: List[Int], p: Int => Boolean): List[Int] = if (xs.isEmpty) xs else if (p(xs.head)) xs.head :: filter(xs.tail, p) else filter(xs.tail, p) def modN(n: Int)(x: Int) = ((x % n) == 0) 因此,您可以编写以下代码来使用它: val nums = List(1,2,3,4,5,6,7,8) println(filter(nums, modN(2)) 返回:List(2,4,6,8)。但是我发现我可以这样做: def modN(n: Int, x: Int) = ((x % n) …


6
在(函数式)编程的上下文中,“确定”和“确定”是什么意思?
我在关于haskell和函数式编程的博客中读了很多(特别是在sigfpe的博客中),但是我对它的含义一无所知。我大多数时候都不了解它,但是如果我知道的话,我可能会更好地理解这些文本。Google帮不了我。我迷失在技术方面。 同样,世界的非技术含义(“使抽象具体化”)也无法帮助我理解在代码中统一某些东西的实际含义。 我对计算机科学的概念有点慢,所以带有代码的实际示例将是不错的选择。:P



5
python:在一定条件下从列表(序列)获取项目数
假设我有一个包含大量项目的列表。 l = [ 1, 4, 6, 30, 2, ... ] 我想从该列表中获取项目数,其中一个项目应满足一定条件。我的第一个想法是: count = len([i for i in l if my_condition(l)]) 但是,如果my_condition()过滤列表中也包含大量项目,我认为为过滤结果创建新列表只是浪费内存。为了提高效率,恕我直言,上面的通话不能比以下更好: count = 0 for i in l: if my_condition(l): count += 1 是否有任何功能样式的方法来获得满足特定条件的项目数而不生成临时列表? 提前致谢。

2
功能镜片
有人可以向我解释功能性镜片吗?对于Google来说,这是一个令人惊讶的困难,而且我没有取得任何进展。我所知道的是,它们提供与OO中类似的获取/设置功能。

1
“ Monad变形金刚比效果更强大”-例如?
Edwin C. Brady关于Idris中的影响的论文“具有代数效应和相关类型的编程和推理”包含(未引用的)主张: 尽管[效果和monad变压器]的功率不相等-monads和monad变压器可以表达更多概念,但可以捕获许多常见的有效计算。 有哪些可以用monad变压器建模但不能用效果建模的示例?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.