问题标签 [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.

0 投票
1 回答
85 浏览

r - dplyr::filter 中的引用透明度:使列名可变

核心问题(它似乎归结为)

如何rlang::quo使用“左”而不是“右”侧引用透明的表达式构造调用

取自的帮助页面rlang::quo,这有效

虽然这不是:

问题放在更多的背景下

dplyr::mutate允许“表达式的两边”在两个表达式部分都可以引用透明的意义上是可变的(参见小插图):

我怎样才能在dplyr::filter能够使列名(“左侧”)引用透明/灵活的焦点中实现相同/相似的东西。

我想理想地结束这样的事情(伪代码):

我试过的

我知道这dplyr::filterdplyr::mutate他们期望的表达式类型不同。所以基于小插图我想出了这个版本,其中要评估的整个表达式作为参数传递:

但是,当我想使用参考时,这“迫使”我真正使用实际的列名c_id

我基本上不知道如何构造调用,dplyr::quo或者dplyr::enquo左侧部分包含列名的评估引用,而右侧部分包含要评估的逻辑查询的**未评估*引用:

换句话说,我认为 quosure 最终应该是~id == right,我不知道该怎么做

0 投票
3 回答
372 浏览

scala - 带状态的功能监听器

假设在我的纯 Scala 程序中,我依赖于 Java 服务。此 Java 服务接受一个侦听器,以便在某些数据更改时通知我。

假设数据是一个元组(x,y),只要 X 或 Y 发生变化,java 服务就会调用监听器,但我只对 X 感兴趣。

为此,我的侦听器必须保存 X 的最后一个值,并仅在 oldX != X 时转发更新/调用,所以为了实现这一点,我的不纯 scala 侦听器实现必须保存一个 var oldX

如果没有 val 或 mutable 集合,我将如何在 Scala 中为这种东西设计一个包装器?我不能在 JavaServiceListener 级别,因为我受方法签名的约束,所以我需要另一个层,Java 侦听器以某种方式转发到该层

0 投票
1 回答
154 浏览

clojure - Clojure:集合、顺序和纯度

(vec #{1 2 3})保证总是退货还是[1 3 2]订单可能不同?

我对这背后的实现细节不太感兴趣,而是从无序到有序,以保持我的函数纯粹且易于测试。

0 投票
0 回答
62 浏览

scala - 它可以被认为是一个纯函数吗?

我目前正在设计一个功能性应用程序并坚持引用透明度的概念。我有以下特点

getAndDeleteOnSuccess应该做的是从一些远程存储中提取 a并将String其应用f: String => F[Unit](这是纯粹的)。如果成功,String则应从存储中删除。我无法将该方法拆分为多个方法,因为我使用可以原子执行此类操作的特定于存储的 API。

问题是这样的功能是否纯粹。或者有什么理由将特征定义为

?

0 投票
1 回答
317 浏览

scala - 为什么延迟工厂方法在F的上下文中有返回值

我正在查看cats.effect.concurrent.Deferred并注意到其伴随对象中的所有工厂方法都返回,而F[Deferred[F, A]]不仅仅是Deferred[F, A]

为什么?

定义了abstract class两种方法(省略了文档):

因此,即使我们Deferred直接分配,也不清楚如何Deferred通过其公共方法修改状态。所有修改都用 暂停F[_]

0 投票
1 回答
59 浏览

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.

0 投票
2 回答
538 浏览

javascript - 函数式编程中的引用透明性

我是 JS 新手,正在学习函数式编程,遇到了“引用透明”一词。另外,我发现了这个声明“引用透明性表明用它的值替换纯函数是安全的”。这是否意味着只要函数变热,使用 RT 可以让 JIT 编译器轻松地将函数替换为其返回值?真的吗?

0 投票
1 回答
402 浏览

functional-programming - 移动语义对 Rust 中的引用透明意味着什么?

我试图弄清楚移动语义如何影响引用透明度。

引用透明性(RT) 允许我们用其结果替换任何表达式,而不会改变程序的含义(从Scala 中的函数式编程解释)。例如,我可以用 替换1 + 1我程序中的任何地方2,并且什么都不应该改变。这个 Python 程序是引用透明的:

而这个函数改变了它的论点

因此用结果替换函数调用会改变含义。它不再是引用透明的。在像 Rust 那样具有移动语义的语言中,我们可以通过移动(并依赖于非-leaves的事实)来避免这个问题:VecCopy

这似乎又是参照透明的。这个对吗?这些举措是否放松了对 RT 设计的传统限制?还是移动不是参照透明的?我特别想知道是否对 RT 有更广泛的影响,而我还没有看到。

0 投票
0 回答
70 浏览

javascript - noop 是纯函数吗?

在 JavaScript 中,我们可以像这样表达一个简单的 noop 函数(在 Lodash 中也是如此):

这可能是一个轻浮的区别,但它算作一个纯函数吗?我最初的猜测是,这因为:

  • 引用透明,因为它总是返回undefined.
  • 不会造成任何副作用。

但是如果我们重复调用这个函数(就像下面的代码块分配undefined给一堆变量),它最终会不会因为外部状态一直在变化而导致不同的行为(比如崩溃程序)?

(或者我们应该在这种情况下把记忆等问题放在一边?)

0 投票
0 回答
31 浏览

r - R:ggplot2:参考透明度问题

下面的函数是出现在 Hadley Wickham 的 ggplot2 书第二版第 26 页上的函数的逐字符精确副本,但有两个例外:

  1. 输出分配给 p,然后绘制。
  2. 原文中“color =”之后的表达式是“year(date)”。

如果你取 year(economics$date),你会得到一个从 1967 年到 2015 年的数字向量,包括 1967 到 2015 年。我用 1967:2015 替换了那个表达式。结果是一个错误:

我有两个问题。

  1. 为什么这个微不足道的改变会破坏功能?
  2. 为什么该功能首先起作用?(确实如此)。因为如果您查看颜色美学的文档,这里: https ://ggplot2.tidyverse.org/articles/ggplot2-specs.html它并没有说颜色美学采用数值向量或函数。