问题标签 [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 投票
15 回答
58189 浏览

functional-programming - 什么是参照透明度?

参考透明度一词是什么意思?我听说它被描述为“这意味着你可以用 equals 替换 equals”,但这似乎是一个不充分的解释。

0 投票
5 回答
38879 浏览

variables - Haskell 有变量吗?

我经常听到有人声称 Haskell 没有变量。特别是,这个答案声称它没有,并且它至少被投票九次并被接受。

那么它是否有变量,为什么?

这个问题似乎也适用于 ML、F#、OCaml、Erlang、Oz、Lava 和所有SSA中间语言。

0 投票
3 回答
385 浏览

data-structures - 将 Haskell Edison API 和 Core 移植到 F# 有什么好处吗?

Edison API 和核心模块是纯功能数据结构的 Haskell 实现

F# 和原生 .Net 数据结构是否充分涵盖了 Edison API 和 Core 中的用例?

尝试将 API 和 CORE Haskell 模块移植到 F# 会有什么好处吗?

0 投票
3 回答
4203 浏览

haskell - 在 Haskell 中对随机数序列进行采样

我需要一个小的高斯随机数列表来进行模拟,所以我尝试了以下方法:

这只是 Box-Muller 算法 - 给定 [0,1] 区间中的 r1, r2 均匀随机数,它返回一个高斯随机数。

所以我normals每次需要我的随机数列表时都使用这个函数。

问题必须很明显:它总是生成相同的序列,因为我总是使用相同的种子!我没有得到新的序列,我一直只得到序列的前 n 个值。

我在假装清楚的是,当我打字时:

我必须 x 成为该列表的前 10 个值,map (boxMuller 0 1) $ pairs $ randoms gy 成为该列表中的下 50 个值,依此类推。

当然这是不可能的,因为在给定相同输入的情况下,函数必须始终返回相同的值。我该如何逃脱这个陷阱?

0 投票
2 回答
3069 浏览

algorithm - 使用 Haskell 查找网格上两点之间的最短路径

这是一个我可以很容易地以非功能方式解决的问题。

但是在 Haskell 中解决它给了我很大的问题。我在函数式编程方面缺乏经验肯定是一个原因。

问题:

我有一个 2D 字段,分为大小相等的矩形。一个简单的网格。一些矩形是空的(可以通过),而另一些则无法通过。给定一个起始矩形A和一个目标矩形B,我将如何计算两者之间的最短路径?只能在垂直和水平方向移动,以单个矩形大的步骤进行。

我将如何在 Haskell 中完成此任务?代码片段当然受欢迎,但也肯定不是必需的。也非常欢迎提供更多资源的链接!

谢谢!

0 投票
9 回答
9706 浏览

haskell - 有没有纯函数式的 Scheme 或 Lisp?

我玩过一些函数式编程语言,并且非常喜欢 Lisps 使用的 s-expr 语法(尤其是方案)。

我还看到了使用纯函数式语言工作的优势。所以:

是否有任何纯粹的功能方案(或一般的 Lisp)?

0 投票
8 回答
5482 浏览

haskell - Haskell 真的是纯粹的吗(任何语言都可以处理系统外的输入和输出)?

在谈到函数式编程方面的 Monads 之后,该功能是否真的使一种语言变得纯粹,或者它只是黑板数学之外在现实世界中推理计算机系统的另一张“出狱卡”?

编辑:

这不是有人在这篇文章中所说的火焰诱饵,而是一个真正的问题,我希望有人能用它击倒我并说,证明,它是纯粹的。

此外,我正在研究关于其他不那么纯粹的函数式语言和一些使用良好设计并比较纯度的 OO 语言的问题。到目前为止,在我非常有限的 FP 世界中,我还没有理解 Monads 的纯度,你会很高兴知道,但是我确实喜欢不变性的想法,这在纯度赌注中更为重要。

0 投票
8 回答
7273 浏览

haskell - 考虑到 unsafePerformIO,Haskell 真的是一种纯粹的函数式语言吗?

Haskell 通常被称为纯函数式语言的示例。鉴于 的存在,这怎么能证明是合理的System.IO.Unsafe.unsafePerformIO

编辑:我认为“纯功能”意味着不可能将不纯的代码引入程序的功能部分。

0 投票
4 回答
911 浏览

oop - 什么叫 OOP 的“参照透明”?

我的理解是,术语“引用透明性”实际上只能应用于功能代码。但是,面向对象代码中对对象的方法调用可以具有类似的属性,即方法的返回值,而方法调用后对象的状态只取决于调用前对象的状态,以及方法的参数。

即功能参考透明度:

OO“参考透明度”:

这个属性有名字吗?

如果obj在调用 的过程中 的状态没有改变,那么如果支持函数重载foo(),那么“面向对象”样式等价于函数形式,因为它可以重写为:

但是,在方法调用中改变状态是很常见的obj,所以我不确定这是否有助于分析......

0 投票
5 回答
637 浏览

functional-programming - 理解参照透明度

一般来说,我很头疼,因为我的推理有问题:

  1. 对于 1 组参数,引用透明函数将始终返回 1 组输出值。

  2. 这意味着此类函数可以表示为真值表(为一组参数指定一组输出参数的表)。

  3. 这使得这些函数背后的逻辑组合的(而不是顺序的)

  4. 这意味着使用纯函数式语言(只有 rt 函数)可以只描述组合逻辑。

最后一个陈述是从这个推理推导出来的,它显然是错误的;这意味着推理存在错误。[问题:这个推理的错误在哪里?]

UPD2。你们,伙计们,说了很多有趣的东西,但没有回答我的问题。我现在更明确地定义了它。很抱歉弄乱了问题定义!