functional-programming相关内容
我一直在做一些函数式编程并有一个问题.也许我可能遗漏了一些东西,但是有什么办法可以在中途停止“reduce()"函数?让我们说当我达到某个条件时?这个想法在某种程度上似乎是反功能的.我在 python 或 F# 中没有看到任何这样的选项, 例如,假设我有一个列表,例如 [1,2,3,4,5].我想对这个列表中的元素求和,直到总和不大于某个数字(假设为 8),然后以某种方式返回/标记/存储/识
..
有谁知道 C++ 数据结构库提供熟悉的 STL 结构的功能(也称为不可变,或 FP 意义上的“持久")等价物? “功能性"是指对象本身是不可变的,而对这些对象的修改会返回与父对象在适当情况下共享相同内部结构的新对象. 理想情况下,这样的库应该类似于 STL,并且可以很好地与 Boost.Phoenix 一起使用(警告-我实际上并没有使用过 Phoenix,但据我所知它提供了许多算法但没
..
有大量关于如何使用柯里化函数的教程,以及在 stackoverflow 上的许多问题.然而,在阅读了 The Little Schemer、几本书、教程、博客文章和 stackoverflow 线程后,我仍然不知道这个简单问题的答案:“柯里化有什么意义?"我确实了解如何咖喱函数,而不是“为什么?"后面. 有人可以向我解释柯里化函数的实际用途吗(在每个函数只允许一个参数的语言之外,使用柯里化的
..
我在 C# 中使用了一些函数式的东西,并且一直被 List.Add 不返回更新列表的事实所困扰. 一般来说,我想在一个对象上调用一个函数,然后返回更新后的对象. 例如,如果 C# 有一个逗号运算符就好了: ((accum, data) => accum.Add(data), accum) 我可以像这样编写自己的“逗号运算符": static T 逗号(Action a, Func
..
我有一个输入值 val 和一个按顺序应用的函数列表: funcs = [f1, f2, f3, ..., fn] 如何优雅地应用而不是写作 fn( ... (f3(f2(f1(val))) ... ) 并且也不使用 for 循环: tmp = val对于函数中的 f:tmp = f(tmp) 感谢 Martijn 的精彩回答.我发现了一些阅读:https://mathieularose
..
我应该什么时候以柯里化形式编写函数? 与我的想法不符,需要自己纠正. 作为我学习的一部分链接,这是我从函数柯里化中所理解的.下面是一个例子: def curry2(f):"""返回一个函数 g 使得 g(x)(y) == f(x, y)>>>从操作符导入添加>>>add_three = curry2(add)(3)>>>add_three(4)"""定义 g(x):定义 h(y):返回 f
..
我一直试图围绕函数式编程进行一段时间.我查阅了 lambda 演算、LISP、OCaml、F# 甚至组合逻辑,但我遇到的主要问题是 - 你如何做需要副作用的事情,例如: 与用户互动, 与远程服务通信,或 使用随机抽样处理模拟 不违反纯函数式编程的基本前提,即对于给定的输入,输出是确定性的? 我希望我说的有道理;如果不是,我欢迎任何帮助我理解的尝试.提前致谢. 解决方案
..
我正在尝试反转列表. 以下是我的代码: reverseList :: [Int] ->[内部]反向列表 [] = []reverseList (x:xs) = x:reverseList xs 最终发生的事情是我最终以相同的顺序取回列表.我什至有一个如何反转列表的解决方案,但我试图了解我在这里做错了什么?我对 haskell 很陌生,所以我认为我应该专注于理解更多,然后才能轻松解决更多问
..
我有两个像这样的对象字面量: var firstObject ={x: 0,y: 1,z: 2,一:10,乙:20,电子:30}var secondObject ={x: 0,y: 1,z: 2,一:10,c: 20,d:30} 我想得到这两个对象字面量的键的交集,如下所示: varintersectionKeys = ['x', 'y', 'z', 'a'] 我显然可以做一个循环,看看另
..
这听起来可能是一个奇怪的问题,但是有没有办法在 Java 8 中引用 Lambda 的标准无操作(又名空操作、空模式方法、无操作、无操作方法)方法. 目前,我有一个方法,例如,void foo(Consumer),我想给它一个空操作,我必须声明: foo(new Consumer() {公共无效接受(对象 o){//没做什么}} 我希望能够执行以下操作: foo(Object::nul
..
为什么很多人说在 Scala 中使用下划线是好的做法并且使您的代码更可读?他们说动机来自形式语言理论.尽管如此,许多程序员,特别是来自其他语言的程序员,尤其是那些具有匿名函数的程序员,不喜欢使用下划线,尤其是占位符. 那么下划线有什么意义呢?为什么 Scala(以及 om-nom-nom 指出的其他一些函数式语言)有下划线?就复杂性和语言理论而言,正式基础是什么,为什么它经常好的风格使用?
..
随着对函数式编程语言的重新兴趣,我看到 Smalltalk 和 FPL 之间的一些相似之处,即闭包(Smalltalk 中的 BlockClosures) 然而,Smalltalk 不是 FPL? 需要什么来考虑它? 解决方案 使用面向对象范式编程是通过将问题域实体识别和建模为对象来创建程序,然后让它们彼此协作以解决每个问题实例.使用函数范式编程是将问题建模为数学问题,并创建一个数学
..
既然副作用破坏了引用的透明性,难道它们不违背函数式语言的观点吗? 解决方案 纯函数式编程语言使用两种技术来模拟副作用: 1) 表示外部状态的世界类型,类型系统保证该类型的每个值仅使用一次. 在使用这种方法的语言中,函数 print 和 read 可能具有类型 (string, world) ->world 和 world ->(string, world) 分别. 它们可
..
我有一个 List 并且想将它减少到单个值(函数式编程术语“折叠",Ruby 术语 inject),例如 Arrays.asList("a", "b", "c") ... fold ... "a,b,c" 由于我被函数式编程思想 (Scala) 所感染,我正在寻找一种比代码更简单/更短的方法 sb = 新的 StringBuilder为了 ... {附加...}sb.toString 解决
..
可以下面的多态函数 let id x = x;;让组合 f g x = f (g x);;let rec fix f = f (fix f);;(*懒惰不谈*) 是为类型/类型构造函数还是模块/函子编写的?我试过了 type 'x id = Id of 'x;;type 'f 'g 'x compose = Compose of ('f ('g 'x));;type 'f fix = Fix
..
我发现定义了以下内容 (%) = 翻转 fmap 我可以这样写代码: readFile "/etc/passwd" % lines % filter (not .null) 对我来说,这比替代方案更有意义: 过滤器(不是 .null)行 读取文件“/etc/passwd" 显然,这只是顺序问题. 有其他人这样做吗?是否有正当理由不编写这样的代码? 解决方案 你的操作
..
一直以来,我发现自己在做这样的事情: Animal *animal = ...if (Cat *cat = dynamic_cast(animal)) {...}else if (Dog *dog = dynamic_cast(animal)) {...}否则{断言(假);} 当我看到 C++11 中的闭包时,我想知道这样的事情可能吗? Animal *animal = ...字体(动物,[
..
此 c# 代码可能不是最有效的,但可以完成我想要完成的工作. 如何在 F# 代码中完成同样的事情? string xml = " " +" test@email.com " +" test2@email.com " +" ";XmlDocument xdoc = new XmlDocument();X
..
我的一位同事向我提出了一个有趣的问题,我无法找到一个简洁漂亮的 Java 8 解决方案.问题是流过一个 POJO 列表,然后根据多个属性将它们收集到一个映射中——映射导致 POJO 出现多次 想象以下 POJO: 私有静态类客户{公共字符串优先;公共字符串最后;公共客户(字符串第一个,字符串最后一个){this.first = 第一;this.last = 最后;}公共字符串 toStri
..
我刚刚开始看看 Haskell(我以前的 FP 经验是在 Scheme 中),我遇到此代码: do { putStrLn "ABCDE" ;putStrLn "12345" } 对我来说,这是过程式编程,如果有的话——尤其是因为副作用的连续性. 有人能解释一下这段代码在任何方面的“功能"吗? 解决方案 虽然它看起来是一个过程程序,但上面的语法被翻译成一个函数式程序,如下所示:
..