问题标签 [referential-transparency]
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.
r - dplyr::filter 中的引用透明度:使列名可变
核心问题(它似乎归结为)
如何rlang::quo
使用“左”而不是“右”侧引用透明的表达式构造调用
取自的帮助页面rlang::quo
,这有效
虽然这不是:
问题放在更多的背景下
dplyr::mutate
允许“表达式的两边”在两个表达式部分都可以引用透明的意义上是可变的(参见小插图):
我怎样才能在dplyr::filter
能够使列名(“左侧”)引用透明/灵活的焦点中实现相同/相似的东西。
我想理想地结束这样的事情(伪代码):
我试过的
我知道这dplyr::filter
与dplyr::mutate
他们期望的表达式类型不同。所以基于小插图我想出了这个版本,其中要评估的整个表达式作为参数传递:
但是,当我想使用参考时,这“迫使”我真正使用实际的列名c_id
:
我基本上不知道如何构造调用,dplyr::quo
或者dplyr::enquo
左侧部分包含列名的评估引用,而右侧部分包含要评估的逻辑查询的**未评估*引用:
换句话说,我认为 quosure 最终应该是~id == right
,我不知道该怎么做
scala - 带状态的功能监听器
假设在我的纯 Scala 程序中,我依赖于 Java 服务。此 Java 服务接受一个侦听器,以便在某些数据更改时通知我。
假设数据是一个元组(x,y),只要 X 或 Y 发生变化,java 服务就会调用监听器,但我只对 X 感兴趣。
为此,我的侦听器必须保存 X 的最后一个值,并仅在 oldX != X 时转发更新/调用,所以为了实现这一点,我的不纯 scala 侦听器实现必须保存一个 var oldX
如果没有 val 或 mutable 集合,我将如何在 Scala 中为这种东西设计一个包装器?我不能在 JavaServiceListener 级别,因为我受方法签名的约束,所以我需要另一个层,Java 侦听器以某种方式转发到该层
clojure - Clojure:集合、顺序和纯度
(vec #{1 2 3})
保证总是退货还是[1 3 2]
订单可能不同?
我对这背后的实现细节不太感兴趣,而是从无序到有序,以保持我的函数纯粹且易于测试。
scala - 它可以被认为是一个纯函数吗?
我目前正在设计一个功能性应用程序并坚持引用透明度的概念。我有以下特点
getAndDeleteOnSuccess
应该做的是从一些远程存储中提取 a并将String
其应用f: String => F[Unit]
(这是纯粹的)。如果成功,String
则应从存储中删除。我无法将该方法拆分为多个方法,因为我使用可以原子执行此类操作的特定于存储的 API。
问题是这样的功能是否纯粹。或者有什么理由将特征定义为
?
scala - 为什么延迟工厂方法在F的上下文中有返回值
我正在查看cats.effect.concurrent.Deferred
并注意到其伴随对象中的所有纯工厂方法都返回,而F[Deferred[F, A]]
不仅仅是Deferred[F, A]
但
为什么?
定义了abstract class
两种方法(省略了文档):
因此,即使我们Deferred
直接分配,也不清楚如何Deferred
通过其公共方法修改状态。所有修改都用 暂停F[_]
。
scala - Can a function operating upon mutable data structure be referentially transparent?
I'm working on an network application and designed the following trait to read files from remote machines:
The problem I see here is that the implementation accepts NetworkContext
as a paramenter which is mutable and contains fields like fileDescriptor
which is related to a network connection.
Is this function read
referentially transparent?
I think yes, because the function itself does not provide direct access to a mutable state (it is under Sync[F].delay
) even though it accepts mutable data structure as an argument.
javascript - 函数式编程中的引用透明性
我是 JS 新手,正在学习函数式编程,遇到了“引用透明”一词。另外,我发现了这个声明“引用透明性表明用它的值替换纯函数是安全的”。这是否意味着只要函数变热,使用 RT 可以让 JIT 编译器轻松地将函数替换为其返回值?真的吗?
functional-programming - 移动语义对 Rust 中的引用透明意味着什么?
我试图弄清楚移动语义如何影响引用透明度。
引用透明性(RT) 允许我们用其结果替换任何表达式,而不会改变程序的含义(从Scala 中的函数式编程解释)。例如,我可以用 替换1 + 1
我程序中的任何地方2
,并且什么都不应该改变。这个 Python 程序是引用透明的:
而这个函数改变了它的论点
因此用结果替换函数调用会改变含义。它不再是引用透明的。在像 Rust 那样具有移动语义的语言中,我们可以通过移动(并依赖于非-leaves
的事实)来避免这个问题:Vec
Copy
这似乎又是参照透明的。这个对吗?这些举措是否放松了对 RT 设计的传统限制?还是移动不是参照透明的?我特别想知道是否对 RT 有更广泛的影响,而我还没有看到。
javascript - noop 是纯函数吗?
在 JavaScript 中,我们可以像这样表达一个简单的 noop 函数(在 Lodash 中也是如此):
这可能是一个轻浮的区别,但它算作一个纯函数吗?我最初的猜测是,这是因为:
- 引用透明,因为它总是返回
undefined
. - 不会造成任何副作用。
但是如果我们重复调用这个函数(就像下面的代码块分配undefined
给一堆变量),它最终会不会因为外部状态一直在变化而导致不同的行为(比如崩溃程序)?
(或者我们应该在这种情况下把记忆等问题放在一边?)
r - R:ggplot2:参考透明度问题
下面的函数是出现在 Hadley Wickham 的 ggplot2 书第二版第 26 页上的函数的逐字符精确副本,但有两个例外:
- 输出分配给 p,然后绘制。
- 原文中“color =”之后的表达式是“year(date)”。
如果你取 year(economics$date),你会得到一个从 1967 年到 2015 年的数字向量,包括 1967 到 2015 年。我用 1967:2015 替换了那个表达式。结果是一个错误:
我有两个问题。
- 为什么这个微不足道的改变会破坏功能?
- 为什么该功能首先起作用?(确实如此)。因为如果您查看颜色美学的文档,这里: https ://ggplot2.tidyverse.org/articles/ggplot2-specs.html它并没有说颜色美学采用数值向量或函数。