Questions tagged «functional-programming»

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


6
为什么要在C ++中的函数中定义结构和类?
我只是错误地在C ++中做了这样的事情,并且它起作用了。我为什么可以这样做? int main(int argc, char** argv) { struct MyStruct { int somevalue; }; MyStruct s; s.somevalue = 5; } 现在,做完这些之后,我想起了很久以前在某个地方读到的有关此技巧的信息,它是一种针对C ++的穷人功能编程工具,但我不记得为什么有效,或者在哪里阅读。 欢迎回答任何一个问题! 注意:尽管在编写问题时我没有得到任何关于此问题的参考,但当前的侧边栏指出了这一点,因此我将其放在此处以供参考,无论哪种方式,问题都不同,但可能有用。

8
在JavaScript中使用Array.map删除元素
我想通过使用map()函数来过滤项目数组。这是一个代码片段: var filteredItems = items.map(function(item) { if( ...some condition... ) { return item; } }); 问题在于,过滤掉的项目仍然会使用数组中的空间,我想完全清除掉它们。 任何的想法? 编辑:谢谢,我忘了filter(),我想要的实际上是一个filter()然后一个map()。 EDIT2:感谢您指出这map()并filter()不能在所有的浏览器中实现,虽然我的特定代码的目的不是为了在浏览器中运行。


7
为什么用功能语言编写编译器更容易?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 改善这个问题 我考虑这个问题已经很长时间了,但实际上在Google上找不到答案,在Stackoverflow上也找不到类似的问题。如果有重复,对不起。 许多人似乎都说,用命令式语言编写使用OCaml和Haskell等功能语言编写的编译器和其他语言工具要高效得多,并且更容易。 这是真的?如果是的话,为什么用功能性语言而不是像C这样的命令性语言编写它们是如此高效和容易?而且-功能语言中的语言工具难道不比C等低级语言慢吗?


19
函数式编程与Web开发相关吗?[关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加详细信息并通过编辑此帖子来澄清问题。 9天前关闭。 改善这个问题 我最近在函数式编程方面见过很多,Clojure看起来特别有趣。尽管我“理解”了它的基本描述,但我完全不知道自己将如何作为Web开发人员每天使用。我读过的很多书都集中在函数式编程的数学方面,而不是常规OO中常见的编程情况。 我的手杖弄错了吗?函数式编程是否与Web开发完全无关?如果没有,是否有“将其用于网络”的示例?

11
弃权弃牌
尽早终止折页的最佳方法是什么?作为一个简化的示例,假设我想对中的数字求和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 } } 但是,此解决方案非常丑陋(例如,如果我执行了.foreach和return,则它会更加清晰明了),最糟糕的是,即使遇到一个非偶数,它也会遍历整个可迭代项。 那么,写出像这样终止的折叠的最佳方法是什么?我应该递归地写这个,还是有一个更被接受的方式?


2
直觉类型理论的组合逻辑等效是什么?
我最近完成了一门以Haskell和Agda(依赖型函数式编程语言)为特色的大学课程,并且想知道是否有可能用组合逻辑代替lambda微积分。使用Haskell,使用S和K组合器似乎可以实现这一点,从而使其变得毫无意义。我想知道阿格达相当于什么。即,是否可以在不使用任何变量的情况下使等效类型化的函数式编程语言等效于Agda? 另外,是否有可能用合并器代替量化?我不知道这是否是巧合,但是例如通用量化会使类型签名看起来像lambda表达式。有没有办法从类型签名中删除通用量化而不改变其含义?例如: forall a : Int -> a < 0 -> a + a < a 可以不花大价钱表达同一件事吗?

5
懒惰地生成排列
我正在寻找一种算法来生成集合的排列,以便可以在Clojure中列出它们的惰性列表。即,我想遍历一系列排列,在我请求之前不会计算每个排列,并且不必将所有排列立即存储在内存中。 或者,我正在寻找一种算法,给定特定集合,该算法将返回该集合的“下一个”排列,以这种方式,在其自己的输出上重复调用该函数将循环遍历原始集合的所有排列,一些订单(顺序无关紧要)。 有这样的算法吗?我见过的大多数置换生成算法都倾向于一次全部生成它们(通常是递归生成),而这些算法不能扩展到很大的集合。用Clojure(或另一种功能语言)实现可能会有所帮助,但我可以从伪代码中弄清楚。

7
Scheme中的eq?,eqv?,equal?和=之间有什么区别?
我想知道Scheme中的那些操作之间有什么区别。我在Stack Overflow中看到了类似的问题,但它们与Lisp有关,并且其中三个运算符之间没有比较。 我在Scheme中编写了不同类型的命令,并且得到以下输出: (eq? 5 5) -->#t (eq? 2.5 2.5) -->#f (equal? 2.5 2.5) --> #t (= 2.5 2.5) --> #t 为什么会这样呢?


8
将Scala分配评估为单位而不是赋值的动机是什么?
将Scala分配评估为单位而不是赋值的动机是什么? I / O编程中的常见模式是执行以下操作: while ((bytesRead = in.read(buffer)) != -1) { ... 但这在Scala中是不可能的,因为... bytesRead = in.read(buffer) ..返回Unit,而不是bytesRead的新值。 忽略功能性语言似乎是一件有趣的事情。我想知道为什么要这么做吗?

18
Option [T]类有什么意义?
我无法理解Option[T]Scala的课程重点。我的意思是,我不能看到任何advanagesNone了null。 例如,考虑以下代码: object Main{ class Person(name: String, var age: int){ def display = println(name+" "+age) } def getPerson1: Person = { // returns a Person instance or null } def getPerson2: Option[Person] = { // returns either Some[Person] or None } def main(argv: Array[String]): Unit = { val p = …

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.