functional-programming相关内容

在 Scala 中应用多个字符串转换

我想在 Scala 中以函数方式对字符串执行多个有序且连续的 replaceAll(...,...). 最优雅的解决方案是什么?欢迎斯卡拉兹!;) 解决方案 首先,让我们从 replaceAll 方法中取出一个函数: scala>val replace = (from: String, to: String) =>(_:String).replaceAll(from, to)替换: ..
发布时间:2022-01-02 13:49:45 其他开发

使用 mkString 与 foldRight 合并字符串列表

我目前正在 Scala 中尝试一些东西,试图习惯函数式编程并再次学习一门新语言(距离上次已经有一段时间了). 现在给出一个字符串列表,如果我想将它们合并成一个长字符串(例如 "scala", "is", "fun" => "scalaisfun")我想出了一种方法要做到这一点,将执行一个 foldRight 并在相应的元素上应用连接.无可否认,另一种更简单的方法是调用 mkString. ..
发布时间:2022-01-02 13:49:38 其他开发

消除我通过像、monads 和其他东西传递的显式状态

我正在 F# 中阅读Land of Lisp 一书(是的,我知道很奇怪).对于他们的第一个示例文本冒险,他们使用了全局变量突变,我想避免它.我的monad-fu很弱,所以现在我正在做这样的丑陋状态: 让拾取玩家事物(对象:地图)=让 objs = objects.[player.Location]让尝试 = objs |>List.partition (fun o -> o.Name = thi ..

C 中的函数式编程(柯里化)/类型问题

作为一名彻头彻尾的函数式程序员,我发现很难不尝试将我最喜欢的范式硬塞进我使用的任何语言中.在编写一些 C 时,我发现我想咖喱我的一个函数,然后传递部分应用的函数.阅读有没有办法在C中进行currying? 并注意 http://gcc.gnu 上的警告.org/onlinedocs/gcc/Nested-Functions.html#Nested-Functions 我想出了: #include ..
发布时间:2022-01-02 13:49:20 其他开发

为什么是“纯"?称为“纯"的函数?

纯函数是一个没有副作用的函数——它不能做任何类型的 I/O,也不能修改任何东西的状态——而且它是引用透明的——当使用相同的输入多次调用时,它总是给出相同的输出. 为什么用“纯"这个词来描述具有这些特性的函数?谁首先以这种方式使用“纯"这个词,什么时候?还有其他词的意思大致相同吗? 解决方案 为了回答您的第一个问题,数学函数通常被描述为“纯"某些特定变量.例如: 第一项是x的纯函 ..

Scala 有守卫吗?

几天前我开始学习scala,在学习它时,我将它与其他函数式编程进行了比较 语言,如 (Haskell、Erlang),我对它有些熟悉.Scala 是否有可用的guard 序列? 我在 Scala 中经历了模式匹配,但是否有任何概念等同于 otherwise 和 all 的守卫? 解决方案 是的,它使用关键字 if.来自 Scala 之旅的案例类部分,靠近底部: def isIden ..
发布时间:2022-01-02 13:48:58 其他开发

在 F#/OCaml 中实现类似快速排序的函数的尾递归版本

是否可以实现快速排序算法的尾递归版本(通过延续模式)?如果是,人们将如何实施它? 普通(未优化)版本: let rec quicksort list =匹配列表|[] ->[]|元素::[] ->[元素]|枢轴::休息->让``小于pivot的元素``,``大于或等于pivot的元素``=休息|>List.partition(fun element -> element 解决方案 直 ..
发布时间:2022-01-02 13:48:51 其他开发

标准 ML 函子示例

Standard ML 中的Functor 与模块系统相关,可以根据其他结构生成结构.下面给出了一个为各种类型的列表生成列表组合子的函子的例子,但这个例子有一个问题: 各种类型的列表都有优点——例如,惰性列表可以无限长,连接列表有一个 O(1) 连接运算符.但是当所有这些列表类型都符合相同的签名时,函子只能使用它们的通用属性. 因此,我的问题是:当函子有用并且各种生成的结构不会失去它们 ..
发布时间:2022-01-02 13:48:40 其他开发

我是否使用 C# dynamic 实现了 Y-combinator,如果没有,它是什么?

我的大脑似乎处于自虐模式,所以在被淹没在this, this 和 this,它想弄乱在 C# 中进行一些 DIY. 我想出了以下内容,我不认为是 Y 组合器,但它确实似乎设法使非递归函数递归, 不指代自身: Func, Func>Y = x =>x(x); 鉴于这些: Func>事实=自我=>n=>n == 0 ?1 : n * self(self)(n - 1);Func ..
发布时间:2022-01-02 13:48:32 C#/.NET

IntStream 逐步迭代

如何使用 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 ..
发布时间:2022-01-02 13:48:25 Java开发

是否有一种方便的方法来创建一个 Predicate 来测试一个字段是否等于给定值?

我经常发现自己需要过滤 Stream 或使用谓词来检查给定字段是否具有给定值. 比如说我有这个 POJO: 公共类 A {私有整数字段;公共 A(最终整数字段){this.field = 字段;}公共整数 getField() {返回字段;}} 我想根据 field 的值过滤一个 Stream 对象: final Integer someValue = 42;Stream.of(ne ..
发布时间:2022-01-02 13:48:06 Java开发

在 Python 中的对象上应用函数列表

有没有干净的方法可以在没有 lambda 或列表推导式的情况下在 Python 中的对象上应用函数列表?就像 Haskell 表达式一样: map ($obj) [foo1,foo2] Python 中的 lambda 示例: response = map(lambda foo:foo(obj),[foo1,foo2]) #fooX:object->Bool 是否可以扩展到类函数? ..
发布时间:2022-01-02 13:47:56 Python

为什么在使用 concat 减少数组时,TypeScript 会推断出“从不"类型?

代码胜于语言,所以: ['a', 'b', 'c'].reduce((accumulator, value) => accumulator.concat(value), []); 代码很傻,返回一个复制的数组... TS 抱怨 concat 的参数:TS2345:“字符串"类型的参数不能分配给“ConcatArray"类型的参数. 解决方案 我相信这是因为 [] 的类型被推断为 ..

“非咖喱".NET 中的实例方法

是否可以在创建时不指定实例的情况下创建实例方法的委托?换句话说,您能否创建一个“静态"委托,该委托将调用方法的实例作为第一个参数? 例如,如何使用反射构造以下委托? Func= i=> i.ToString(); 我知道我可以使用methodInfo.Invoke,但速度较慢,并且在调用之前不会检查类型正确性. 当您拥有特定静态方法的MethodInfo时,可以使用Delegate ..
发布时间:2022-01-02 13:47:34 C#/.NET

Function.bind.bind(Function.call) 是如何解咖喱的?

我们的代码库中有这一行: var uncurryThis = Function.bind.bind(Function.call); 我正在努力解决这个问题.据推测,它不加咖喱.我该如何解决这个问题? 我猜这是Function.bind 的一个版本,它自己的this 绑定到Function.call.对我帮助不够.而且我还没有发现任何用途,所以我什至不确定你是将它独立调用还是需要将它称为“ ..

LINQ 多少钱?

我正在研究 LINQ 并且查询语言似乎(至少在表面上)只不过是在 Haskell 和其他 FP 语言中发现的地图和/或列表推导式的实现(特别是“地图"的泛化' 和 'for' 在 Scala 中).这个对吗?还有比这更多的语法吗?从我正在阅读的这本书(“Essential LINQ")令人窒息的语气来看,这里似乎有一些新的或创新的东西. 有整个后端、管道、一阶表达式树和类型等来实现 LINQ ..
发布时间:2022-01-02 13:47:00 C#/.NET

Scala 编程一堆 if 的方法

我从 scala 开始,并尝试将函数式方法应用于它,但我得出了一堆难以阅读的嵌套 if\else 结构,我想知道有没有更好的方法来编程这些东西? 例如我写了一个脚本,执行括号平衡: def balance(chars: List[Char]): Boolean = {def checkParentesys(chars: List[Char], parentesis: List[Char]) ..
发布时间:2022-01-02 13:46:51 其他开发

函数式编程和多核架构

我在某处读到函数式编程适合利用计算中的多核趋势.我没有真正明白这个想法.和 lambda 演算和冯诺依曼架构有关系吗? 解决方案 函数式编程可以最小化或消除副作用,因此更适合分布式编程.即多核处理. 换句话说,可以在不同的内核上同时独立解决许多难题,而不必像在其他编程风格中一样担心一个操作对另一个操作的影响. ..
发布时间:2022-01-02 13:46:41 其他开发