gpt4 book ai didi

functional-programming - 纯函数可以更改输入参数吗?

转载 作者:行者123 更新时间:2023-12-01 00:20:33 24 4
gpt4 key购买 nike

改变输入参数值的函数仍然是纯函数吗?

我的例子( Kotlin ):

data class Klicker(
var id: Long = 0,
var value: Int = 0
)

fun Klicker.increment() = this.value++

fun Klicker.decrement() = this.value--

fun Klicker.reset() {
this.value = 0
}

Wikipedia说一个纯函数有这两个要求:
  • 给定相同的参数值,该函数始终计算相同的结果值。函数结果值不能依赖于在程序执行过程中或在程序的不同执行之间可能改变的任何隐藏信息或状态,也不能依赖于来自 I/O 设备的任何外部输入。
  • 结果的评估不会导致任何语义上可观察的副作用或输出,例如可变对象的突变或输出到 I/O 设备。

  • 根据我的理解,我示例中的所有函数都符合第一个要求。

    我的不确定性始于第二个要求。随着输入参数的变化,我改变了一个对象(违反规则),但这个对象不在函数范围内,所以也许没有违反规则?

    另外,纯函数是否总是需要返回一个全新的值?

    我认为,这个函数被认为是 100% 纯的:
    fun pureIncrement(klicker: Klicker): Klicker {
    return klicker.copy(value = klicker.value++)
    }

    温柔点,这是我的第一个 Stackoverflow 问题。

    最佳答案

    incrementdecrement函数不满足纯函数的任何要求。它们的返回值取决于 Klicker 的状态类,在程序执行过程中可能会发生变化,因此第一个要求没有得到满足。结果的评估变异了可变 Klicker例如,所以第二个要求也没有得到满足。可变数据在哪个范围内并不重要;纯函数根本不能改变任何数据。
    reset函数只违反了第二个要求。
    pureIncrement如果您将其更改为:

    fun pureIncrement(klicker: Klicker): Klicker {
    return klicker.copy(value = klicker.value + 1)
    }

    关于functional-programming - 纯函数可以更改输入参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49069045/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com