问题标签 [purely-functional]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
132 浏览

scala - 更新不可变对象

我建立了以下课程:

}

我正在尝试做

这实际上是将字段“timePlayed”加一,并返回新的玩家“列表”。

有没有更方便的方法来做到这一点?也许:

我的问题是如何以更方便的方式实现 timeIncremented() ?这样我就不必这样做了:

谢谢!

0 投票
1 回答
1614 浏览

scala - Scala 构造一个“列表”,从标准输入读取,输出到标准输出

我正在尝试使用 Scala 从标准输入读取格式化输入:

等效的 C++ 代码在这里:

我想在 Scala 代码中的哪个位置使用

来存储这些数据。

有人可以提供示例代码吗?

或者,让我知道如何:

  1. “main()”函数如何在 scala 中工作
  2. 从标准输入读取格式化文本
  3. 有效地从输入构造一个列表(因为列表是不可变的,也许有一种更有效的方法来构造它?而不是在每个元素进入时都有一个新列表?)
  4. 将格式化文本输出到标准输出

谢谢!!!

0 投票
5 回答
424 浏览

java - 确定静态方法是否是纯函数式的

给定一个java.lang.reflect.Method对象,是否可以确定该方法是否是纯函数式的(即,给定相同的输入,它总是会产生相同的输出并且它是无状态的。换句话说,该函数不依赖于它的环境)?

0 投票
1 回答
104 浏览

function - 火卫一的纯度降低

为什么std.algorithm.reduce火卫一不是纯的?这是一个未解决的问题还是有原因不能解决?

这是否与以下问题有关: “纯函数是什么样的” Andrei 在 DConf 2013 的最后一场演讲中问道?

见:http://forum.dlang.orgthread/20120306224101.GA30389@quickfur.ath.cx

我希望sparseness以下代码中的函数是纯的。我想我现在总是可以reduceforeach循环替换,对吧?

更新:

我决定改用isIterableandforeach而不是上面的,因为这对我现在也很有效并且可以制作东西@safe pure nothrow。我认为现在不需要使用高阶函数来解决这个问题。我还发现 Davids Simchas 即将std.rational在这里使用非常自然:

0 投票
2 回答
378 浏览

scala - Scala 如何适用于大型可扩展应用程序

我正在学习Functional Programming Principles in Scala | Coursera Scala 课程。我无法理解immutability,so many functionsso much dependencies on recursion, 如何Scala真正适合现实世界的应用程序。

我的意思是来自imperative languages我看到风险StackOverflowGarbage Collection踢我正在运行的所有内容的多个副本Out Of Memory

我在这里缺少什么?

0 投票
4 回答
117 浏览

haskell - 使用读取后不改变的参数

我正在学习 Haskell 并编写一个程序来解决一个玩具问题。程序使用的参数k在从文件中读取参数后在运行时不会更改。我对使用纯函数很陌生,我想尽可能多地编写纯函数。

我有一个数据类型Node,以及比较节点、获取节点后代等的函数。目前,所有这些函数都以参数k作为参数,例如

每当我必须在函数中递归调用其中任何一个时,我都必须重复k参数。这似乎是多余的,因为k对于这些函数永远不会有不同的值,并且因为它降低了类型签名的可读性,如果可能的话,我想重构它。

是否有任何策略可以使用纯函数来做到这一点,或者这仅仅是我必须处理的限制?

我所想到的

早些时候我在顶层硬编码k ,它似乎工作(我能够在函数中使用k而不需要它作为显式参数)。但是,一旦我需要从文件中读取输入,这显然是不可行的。

另一种可能的策略是在函数中定义所有这些函数main,但在 Haskell 中似乎强烈反对这样做。

0 投票
1 回答
227 浏览

haskell - 在haskell中传输状态变化的好包装器是什么?

为了我自己的利益,我正在尝试实现一个简单的 FRP 后端。

我决定使用纯函数:所以,核心中没有 IO。该实现基于信号变压器。

我已经尝试了两种方法:

https://gist.github.com/Heimdell/9675964#file-streamer-hs-L1

https://gist.github.com/Heimdell/9675964#file-behaviour-hs-L1(命名错误,抱歉)

这两种方式都可以制作fold/integrate :: (a -> b -> b) -> b -> SF a b用于信号集成的组合器。

两种方式都有一个问题:似乎不可能创建一个有效的 ArrowApply/Monad 实例。

  • Stream-way:我们有一个对列表(arrow, x)- 或者,unziped,一对列表(arrows, xs)

    • 如果我们愿意得到 'emmap head的结果zipWith ($),我们将失去随身携带的箭头突变。
    • 如果我们head arrowsxs,我们将冻结第一个箭头的状态。
  • 显式状态方式:

    在这里,我们需要以某种方式有效地注入bf1返回app,这是不可能的(实际上注入(const bf1 *** id)会产生类似于其他实现的第二个无效行为。

有没有办法制作一个SF允许 ArrowApply 实例的方法?

PS:当分支长时间未使用时,流路在 ArrowChoice 中存在内存泄漏。目前,我无法解决这个问题。是否有可能制作它的无泄漏版本?

PPS:如果需要时间,他可以用输入压缩它。

0 投票
1 回答
381 浏览

haskell - 将 Haskell 函数转换为无点表示

我想创建一个无点函数,它采用函数列表,将单个参数应用于每个列出的函数,然后通过另一个函数压缩列表。此函数的无点版本将具有以下类型签名:

multiplex :: ([a] -> b) -> [(c -> a)] -> (c -> b)

以及一个示例用法:

我能够写出以下内容:

这个实现不是无点的,我怎样才能把这个函数转换成无点表示?

0 投票
3 回答
114 浏览

functional-programming - 当我需要多次存储(当前秒)时避免可变状态

我在 Racket 中组装了以下基本秒表(现在刚刚学习,最终目标是番茄钟)。

虽然这正是它应该做的,但我想知道如何避免可变状态。如果我遵循 HTDP,这是一种需要可变状态的情况,但是在浏览了 Wadler 的“函数式编程的 Monads ”之后,我仍然对没有set!.

我知道要使其正常工作,我应该为我的函数添加参数。例如,start将成为

类似的方法可以与lapand一起使用stop

尽管如此,虽然我知道在添加额外的参数来恢复功能之后,我还应该传递参数而不是将值存储在变量中,但我不知道在这种情况下我可以如何利用它来避免set!

更新:由于以下所有三个答案都非常有价值(谢谢!),我没有将它们中的任何一个标记为唯一正确的答案。以下是我最初问题的最小解决方案。它是@Metaxal 的循环建议与@Greg Hendershott 的示例用法的组合。

0 投票
1 回答
616 浏览

functional-programming - 纯功能球拍

改变状态的所有 Racket 程序是什么?我正在尝试创建一个副作用尽可能少的程序

所以,我会做类似的事情:

除了设置我还应该排除什么!? 是否有所有不纯函数的完整列表?

哦,该程序还使用#lang racket/gui(据我所知,这主要是不纯的)。所以这可能很棘手......

谢谢你。