functional-programming相关内容
我想在 Scala 中以函数方式对字符串执行多个有序且连续的 replaceAll(...,...). 最优雅的解决方案是什么?欢迎斯卡拉兹!;) 解决方案 首先,让我们从 replaceAll 方法中取出一个函数: scala>val replace = (from: String, to: String) =>(_:String).replaceAll(from, to)替换:
..
我目前正在 Scala 中尝试一些东西,试图习惯函数式编程并再次学习一门新语言(距离上次已经有一段时间了). 现在给出一个字符串列表,如果我想将它们合并成一个长字符串(例如 "scala", "is", "fun" => "scalaisfun")我想出了一种方法要做到这一点,将执行一个 foldRight 并在相应的元素上应用连接.无可否认,另一种更简单的方法是调用 mkString.
..
我正在 F# 中阅读Land of Lisp 一书(是的,我知道很奇怪).对于他们的第一个示例文本冒险,他们使用了全局变量突变,我想避免它.我的monad-fu很弱,所以现在我正在做这样的丑陋状态: 让拾取玩家事物(对象:地图)=让 objs = objects.[player.Location]让尝试 = objs |>List.partition (fun o -> o.Name = thi
..
作为一名彻头彻尾的函数式程序员,我发现很难不尝试将我最喜欢的范式硬塞进我使用的任何语言中.在编写一些 C 时,我发现我想咖喱我的一个函数,然后传递部分应用的函数.阅读有没有办法在C中进行currying? 并注意 http://gcc.gnu 上的警告.org/onlinedocs/gcc/Nested-Functions.html#Nested-Functions 我想出了: #include
..
纯函数是一个没有副作用的函数——它不能做任何类型的 I/O,也不能修改任何东西的状态——而且它是引用透明的——当使用相同的输入多次调用时,它总是给出相同的输出. 为什么用“纯"这个词来描述具有这些特性的函数?谁首先以这种方式使用“纯"这个词,什么时候?还有其他词的意思大致相同吗? 解决方案 为了回答您的第一个问题,数学函数通常被描述为“纯"某些特定变量.例如: 第一项是x的纯函
..
几天前我开始学习scala,在学习它时,我将它与其他函数式编程进行了比较 语言,如 (Haskell、Erlang),我对它有些熟悉.Scala 是否有可用的guard 序列? 我在 Scala 中经历了模式匹配,但是否有任何概念等同于 otherwise 和 all 的守卫? 解决方案 是的,它使用关键字 if.来自 Scala 之旅的案例类部分,靠近底部: def isIden
..
是否可以实现快速排序算法的尾递归版本(通过延续模式)?如果是,人们将如何实施它? 普通(未优化)版本: let rec quicksort list =匹配列表|[] ->[]|元素::[] ->[元素]|枢轴::休息->让``小于pivot的元素``,``大于或等于pivot的元素``=休息|>List.partition(fun element -> element 解决方案 直
..
Standard ML 中的Functor 与模块系统相关,可以根据其他结构生成结构.下面给出了一个为各种类型的列表生成列表组合子的函子的例子,但这个例子有一个问题: 各种类型的列表都有优点——例如,惰性列表可以无限长,连接列表有一个 O(1) 连接运算符.但是当所有这些列表类型都符合相同的签名时,函子只能使用它们的通用属性. 因此,我的问题是:当函子有用并且各种生成的结构不会失去它们
..
我的大脑似乎处于自虐模式,所以在被淹没在this, this 和 this,它想弄乱在 C# 中进行一些 DIY. 我想出了以下内容,我不认为是 Y 组合器,但它确实似乎设法使非递归函数递归, 不指代自身: Func, Func>Y = x =>x(x); 鉴于这些: Func>事实=自我=>n=>n == 0 ?1 : n * self(self)(n - 1);Func
..
如何使用 IntStream 在步骤 (3) 中迭代一系列数字 (0-100)? 我尝试了 iterate,但这永远不会停止执行. IntStream.iterate(0, n -> n + 3).filter(x -> x > 0 && x 解决方案 实际上 range 是解决这个问题的理想选择. IntStream.range(0, 100).filter(x -> x % 3
..
我只是想在 F# 控制台应用程序中暂停,所以我写道: Console.ReadKey() 但这给出了警告:此表达式的类型应该为“unit",但类型为“ConsoleKeyInfo". 我该怎么做才能解决这个问题? 解决方案 解决方案: Console.ReadKey() |>忽略 说明:Console.ReadKey() 返回类型为“ConsoleKeyInfo"的对
..
我经常发现自己需要过滤 Stream 或使用谓词来检查给定字段是否具有给定值. 比如说我有这个 POJO: 公共类 A {私有整数字段;公共 A(最终整数字段){this.field = 字段;}公共整数 getField() {返回字段;}} 我想根据 field 的值过滤一个 Stream 对象: final Integer someValue = 42;Stream.of(ne
..
有没有干净的方法可以在没有 lambda 或列表推导式的情况下在 Python 中的对象上应用函数列表?就像 Haskell 表达式一样: map ($obj) [foo1,foo2] Python 中的 lambda 示例: response = map(lambda foo:foo(obj),[foo1,foo2]) #fooX:object->Bool 是否可以扩展到类函数?
..
代码胜于语言,所以: ['a', 'b', 'c'].reduce((accumulator, value) => accumulator.concat(value), []); 代码很傻,返回一个复制的数组... TS 抱怨 concat 的参数:TS2345:“字符串"类型的参数不能分配给“ConcatArray"类型的参数. 解决方案 我相信这是因为 [] 的类型被推断为
..
是否可以在创建时不指定实例的情况下创建实例方法的委托?换句话说,您能否创建一个“静态"委托,该委托将调用方法的实例作为第一个参数? 例如,如何使用反射构造以下委托? Func= i=> i.ToString(); 我知道我可以使用methodInfo.Invoke,但速度较慢,并且在调用之前不会检查类型正确性. 当您拥有特定静态方法的MethodInfo时,可以使用Delegate
..
我们的代码库中有这一行: var uncurryThis = Function.bind.bind(Function.call); 我正在努力解决这个问题.据推测,它不加咖喱.我该如何解决这个问题? 我猜这是Function.bind 的一个版本,它自己的this 绑定到Function.call.对我帮助不够.而且我还没有发现任何用途,所以我什至不确定你是将它独立调用还是需要将它称为“
..
我正在研究 LINQ 并且查询语言似乎(至少在表面上)只不过是在 Haskell 和其他 FP 语言中发现的地图和/或列表推导式的实现(特别是“地图"的泛化' 和 'for' 在 Scala 中).这个对吗?还有比这更多的语法吗?从我正在阅读的这本书(“Essential LINQ")令人窒息的语气来看,这里似乎有一些新的或创新的东西. 有整个后端、管道、一阶表达式树和类型等来实现 LINQ
..
我从 scala 开始,并尝试将函数式方法应用于它,但我得出了一堆难以阅读的嵌套 if\else 结构,我想知道有没有更好的方法来编程这些东西? 例如我写了一个脚本,执行括号平衡: def balance(chars: List[Char]): Boolean = {def checkParentesys(chars: List[Char], parentesis: List[Char])
..
我在某处读到函数式编程适合利用计算中的多核趋势.我没有真正明白这个想法.和 lambda 演算和冯诺依曼架构有关系吗? 解决方案 函数式编程可以最小化或消除副作用,因此更适合分布式编程.即多核处理. 换句话说,可以在不同的内核上同时独立解决许多难题,而不必像在其他编程风格中一样担心一个操作对另一个操作的影响.
..
在OCaml中,我们有两种股权比较: x = y 和 x == y, 那么它们之间的确切区别是什么? ocaml 中的 x = y 和 Java 中的 x.equals(y) 一样吗? and x == y 就像Java中的x == y(比较地址)? 解决方案 我不知道 x.equals(y) 在 Java 中究竟是如何工作的.如果它进行“深度"比较,则类比非常接近
..