referential-transparency相关内容

函数式语言如何模拟副作用?

既然副作用破坏了引用的透明性,难道它们不违背函数式语言的观点吗? 解决方案 纯函数式编程语言使用两种技术来模拟副作用: 1) 表示外部状态的世界类型,类型系统保证该类型的每个值仅使用一次. 在使用这种方法的语言中,函数 print 和 read 可能具有类型 (string, world) ->world 和 world ->(string, world) 分别. 它们可 ..
发布时间:2022-01-02 14:00:53 其他开发

Haskell 是否真正纯粹(是否有任何语言处理系统外的输入和输出)?

在涉及函数式编程方面的 Monads 之后,该功能是否真的使语言变得纯粹,或者只是在黑板数学之外的现实世界中推理计算机系统的另一张“越狱卡"? 编辑: 这不是有人在这篇文章中所说的火焰诱饵,而是一个真正的问题,我希望有人可以击倒我并说,证明,它是纯粹的. 此外,我正在研究与其他不那么纯粹的函数式语言和一些使用良好设计并比较纯度的面向对象语言的问题.到目前为止,在我非常有限的 FP ..

Haskell 有变量吗?

我经常听到声称 Haskell 没有变量;特别是,这个答案声称它没有't,并且它至少被点赞了 9 次并被接受. 那么它有没有变量,为什么? 这个问题似乎也适用于 ML、F#、OCaml、Erlang、Oz、Lava 和所有 SSA 中级语言. 解决方案 Haskell 默认有不可变变量(数学意义上的变量): foo x y = x + y * 2 默认情况下,变量不是可变 ..

移动语义对于 Rust 中的引用透明性意味着什么?

我正在尝试研究移动语义如何影响引用透明度. 参照透明 (RT) 允许我们用其结果替换任何表达式而不改变程序的含义(意译来自 桶:返回桶(东西+ [“沙子"])bucket_with_sand(leaves) # 可以用 Bucket(["leaves", "sand"]) 代替,程序不变 而这个函数就地改变了它的参数 def bucket_with_sand(things: List ..

Haskell-如何在IO函数中使用纯函数?

如何在IO函数中使用纯函数? :-/ 例如:我正在读取文件(IO函数),并且我想通过使用具有参照透明性的纯函数来解析其上下文(字符串). 似乎这些世界,纯功能和IO功能是分开的.我怎么可能桥接它们? 解决方案 最简单的方法是使用fmap,它具有以下类型: fmap :: (Functor f) => (a -> b) -> f a -> f b IO实现Functor ..
发布时间:2020-11-22 06:30:14 其他开发

函数式编程中的参照透明性

我是JS的新手,正在学习函数式编程,遇到了“参照透明性"一词.另外,我发现该语句“引用透明性说用它的值替换纯函数是安全的".这是否意味着只要函数变热,使用RT就能使JIT编译器轻松用其返回值替换函数?是真的吗? 解决方案 下面是一个示例: 这是一个纯函数:它将始终为相同的输入返回相同的输出 const even = x => x % 2 === 0; 然后我们创建isTe ..

纯函数可以返回一个符号吗?

这可能与哲学有关,但我认为这是正确的提问地点。 假设我有一个创建ID列表的函数。这些标识符仅在内部用于应用程序,因此可以在此处使用ES2015 Symbol()。 我的问题是,技术上,当你要求一个符号时,我想象JS运行时会创建一个唯一的标识符(随机数?内存地址?不确定),为了防止冲突,需要访问全球国家。我不确定的原因是因为这个词,“技术上”。我不确定(再次,从哲学的角度来看)这是否足以 ..
发布时间:2019-06-08 18:19:39 前端开发

Haskell中的Random-Pivot Quicksort

是否有可能在Haskell中实现一个快速排序(使用RANDOM-PIVOT),它仍然有一个简单的 Ord a => [a] - > [a] 签名? 我开始了解Monads,现在我很友善将单子解释为一种“命令模式”,这对IO来说非常有用。 所以,我明白一个返回一个随机数的函数实际上应该返回一个像IO这样的monadic值,否则它会破坏引用透明性。我也明白,应该没有办法从返回的monadi ..

Haskell中函数调用的优化

不确定这个问题到底是什么,所以我会直接把它发布到SO: Haskell中的变量是不可变的 纯函数对于相同的参数应该得到相同的值 从这两点来看,推断如果你在你的代码中调用 somePureFunc somevar1 somevar2 两次,在第一次调用期间计算该值才有意义。结果值可以存储在某种巨大的哈希表(或类似的东西)中,并在以后对该函数的调用中查找。我有两个问题: GHC是否 ..

Haskell有变量吗?

我经常听到Haskell没有变量的说法;特别是,这个答案声称它不会'吨,它被提高了至少9倍,并被接受。 那么它是否有变量,为什么? 这个问题似乎也适用于ML,F#,OCaml,Erlang,Oz,Lava以及所有 SSA 中间语言。 解决方案 Haskell默认具有不可变变量(数学意义上的变量): foo xy = x + y * 2 默认情况下变量不 ..

参照透明度

当在功能性程序设计中使用术语“引用透明”时,术语“不可观察”的含义是什么? 解决方案正如你可能知道的那样,术语“引用透明”意味着表达式的值只能取决于其部分的值,而不取决于关于它们的任何其他事实。例如,它不能依赖于以下内容: 表达式的某些部分已经被评估过了(用懒惰的语言) 是否共享两个相等的值(指向内存中相同位置的指针)或不是 数据结构是循环的(即它的指针创建一个循环)还是不是 ..

有没有纯功能的方案或Lisps?

我玩过几种函数式编程语言,并且非常喜欢Lisp(特别是Scheme)使用的s-expr语法。 我也看到了以纯功能语言工作的优势。因此: 是否有任何纯粹功能性的Schemes(或一般的Lisps)? 可能不是,至少不是玩具/概念验证以外的任何东西。请注意,即使Haskell也不是100%纯功能的 - 它具有秘密逃生舱口,并且任何 IO 都是只有在词汇的一些曲折,手摇的感觉中才是”纯 ..

功能语言如何建模副作用?

由于副作用会破坏引用透明性,请不要违背函数式语言的要点? 有解决方案 有两种技术被纯函数式编程语言用于建模副作用:1)一种表示外部状态的世界类型,其中每种类型的值都由类型系统只能使用一次。 在使用这种方法的语言中,函数 print 和 read 可能有类型(string,world) - >世界和世界 - > (字符串,世界)。 它们可能是这样使用的: w3 但不是这样: ..
发布时间:2018-04-18 15:26:02 其他开发

纯度vs参考透明度

这些术语似乎有不同的定义,但我一直认为其中一个暗示另一个;我不能想到任何情况下,当表达是透明的,但不是纯粹的,反之亦然。 维基百科针对这些概念保留了不同的文章,并说: From 参照透明度: 如果 表达式中涉及的所有函数都是纯函数,那么 表达式的引用是透明的 。此外,如果 表达式的值被 丢弃,并且它们的副作用是 无关紧要,那么一些不纯的 函数可以包含在 表达式中。 ..

Haskell是否真的是纯粹的(任何处理系统外部输入和输出的语言)?

在涉及函数式编程的Monad之后,该特性实际上是否使语言变得纯粹,还是仅仅是另一种“摆脱监狱免费卡”来推断现实世界中的计算机系统,而不是黑板数学? 编辑: 这不是火焰诱饵,因为有人在这篇文章中说过,但真正的问题是我希望有人能够打倒我,并说,证明它是纯粹的。 另外,我正在考虑关于其他不太纯粹的功能性语言以及一些使用良好设计和比较纯度的面向对象语言。到目前为止,在我非常有限的FP世界 ..

什么是参照透明度?

术语参考透明度是什么意思?我听说它被描述为“它意味着你可以用等号代替等于”,但这似乎是一个不充分的解释。 解决方案 术语“参考透明度”来自分析哲学,它是分析自然语言结构的哲学分支,基于逻辑和数学方法的陈述和论据。换句话说,它是计算机科学以外最接近我们所称的编程语言语义的主题。哲学家奎因负责启动参照透明度的概念,但这也是隐含的方法伯特兰罗素和阿尔弗雷德怀特黑德。 “参照透明度”的核心是一个非常 ..