问题标签 [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.
scala - 更新不可变对象
我建立了以下课程:
}
我正在尝试做
这实际上是将字段“timePlayed”加一,并返回新的玩家“列表”。
有没有更方便的方法来做到这一点?也许:
我的问题是如何以更方便的方式实现 timeIncremented() ?这样我就不必这样做了:
谢谢!
scala - Scala 构造一个“列表”,从标准输入读取,输出到标准输出
我正在尝试使用 Scala 从标准输入读取格式化输入:
等效的 C++ 代码在这里:
我想在 Scala 代码中的哪个位置使用
来存储这些数据。
有人可以提供示例代码吗?
或者,让我知道如何:
- “main()”函数如何在 scala 中工作
- 从标准输入读取格式化文本
- 有效地从输入构造一个列表(因为列表是不可变的,也许有一种更有效的方法来构造它?而不是在每个元素进入时都有一个新列表?)
- 将格式化文本输出到标准输出
谢谢!!!
java - 确定静态方法是否是纯函数式的
给定一个java.lang.reflect.Method
对象,是否可以确定该方法是否是纯函数式的(即,给定相同的输入,它总是会产生相同的输出并且它是无状态的。换句话说,该函数不依赖于它的环境)?
function - 火卫一的纯度降低
为什么std.algorithm.reduce
火卫一不是纯的?这是一个未解决的问题还是有原因不能解决?
这是否与以下问题有关: “纯函数是什么样的” Andrei 在 DConf 2013 的最后一场演讲中问道?
见:http://forum.dlang.orgthread/20120306224101.GA30389@quickfur.ath.cx
我希望sparseness
以下代码中的函数是纯的。我想我现在总是可以reduce
用foreach
循环替换,对吧?
更新:
我决定改用isIterable
andforeach
而不是上面的,因为这对我现在也很有效并且可以制作东西@safe pure nothrow
。我认为现在不需要使用高阶函数来解决这个问题。我还发现 Davids Simchas 即将std.rational
在这里使用非常自然:
scala - Scala 如何适用于大型可扩展应用程序
我正在学习Functional Programming Principles in Scala | Coursera
Scala 课程。我无法理解immutability
,so many functions
和so much dependencies on recursion
, 如何Scala
真正适合现实世界的应用程序。
我的意思是来自imperative languages
我看到风险StackOverflow
或Garbage Collection
踢我正在运行的所有内容的多个副本Out Of Memory
我在这里缺少什么?
haskell - 使用读取后不改变的参数
我正在学习 Haskell 并编写一个程序来解决一个玩具问题。程序使用的参数k在从文件中读取参数后在运行时不会更改。我对使用纯函数很陌生,我想尽可能多地编写纯函数。
我有一个数据类型Node
,以及比较节点、获取节点后代等的函数。目前,所有这些函数都以参数k作为参数,例如
每当我必须在函数中递归调用其中任何一个时,我都必须重复k参数。这似乎是多余的,因为k对于这些函数永远不会有不同的值,并且因为它降低了类型签名的可读性,如果可能的话,我想重构它。
是否有任何策略可以使用纯函数来做到这一点,或者这仅仅是我必须处理的限制?
我所想到的
早些时候我在顶层硬编码k ,它似乎工作(我能够在函数中使用k而不需要它作为显式参数)。但是,一旦我需要从文件中读取输入,这显然是不可行的。
另一种可能的策略是在函数中定义所有这些函数main
,但在 Haskell 中似乎强烈反对这样做。
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)
- 或者,unzip
ed,一对列表(arrows, xs)
。- 如果我们愿意得到 'em
map head
的结果zipWith ($)
,我们将失去随身携带的箭头突变。 - 如果我们
head arrows
听xs
,我们将冻结第一个箭头的状态。
- 如果我们愿意得到 'em
显式状态方式:
在这里,我们需要以某种方式有效地注入
bf1
返回app
,这是不可能的(实际上注入(const bf1 *** id)
会产生类似于其他实现的第二个无效行为。
有没有办法制作一个SF
允许 ArrowApply 实例的方法?
PS:当分支长时间未使用时,流路在 ArrowChoice 中存在内存泄漏。目前,我无法解决这个问题。是否有可能制作它的无泄漏版本?
PPS:如果需要时间,他可以用输入压缩它。
haskell - 将 Haskell 函数转换为无点表示
我想创建一个无点函数,它采用函数列表,将单个参数应用于每个列出的函数,然后通过另一个函数压缩列表。此函数的无点版本将具有以下类型签名:
multiplex :: ([a] -> b) -> [(c -> a)] -> (c -> b)
以及一个示例用法:
我能够写出以下内容:
这个实现不是无点的,我怎样才能把这个函数转换成无点表示?
functional-programming - 当我需要多次存储(当前秒)时避免可变状态
我在 Racket 中组装了以下基本秒表(现在刚刚学习,最终目标是番茄钟)。
虽然这正是它应该做的,但我想知道如何避免可变状态。如果我遵循 HTDP,这是一种需要可变状态的情况,但是在浏览了 Wadler 的“函数式编程的 Monads ”之后,我仍然对没有set!
.
我知道要使其正常工作,我应该为我的函数添加参数。例如,start
将成为
类似的方法可以与lap
and一起使用stop
。
尽管如此,虽然我知道在添加额外的参数来恢复功能之后,我还应该传递参数而不是将值存储在变量中,但我不知道在这种情况下我可以如何利用它来避免set!
。
更新:由于以下所有三个答案都非常有价值(谢谢!),我没有将它们中的任何一个标记为唯一正确的答案。以下是我最初问题的最小解决方案。它是@Metaxal 的循环建议与@Greg Hendershott 的示例用法的组合。
functional-programming - 纯功能球拍
改变状态的所有 Racket 程序是什么?我正在尝试创建一个副作用尽可能少的程序
所以,我会做类似的事情:
除了设置我还应该排除什么!? 是否有所有不纯函数的完整列表?
哦,该程序还使用#lang racket/gui(据我所知,这主要是不纯的)。所以这可能很棘手......
谢谢你。