gpt4 book ai didi

functional-programming - 可以在函数式编程的定义中考虑 'programming without assignment' 吗?

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

我知道 functional programming 有几个定义。 .我认为这是一个模糊的类别。我个人的定义是接近' referential transparency '。

这个问题不是“函数式编程的定义是什么?” .假设是,我们所知道的函数式编程是几个不同想法的抓包,但边界不明确。

现在这本相当神奇的书Structure and Interpretation of Computer Programs contains the following reference到函数式编程这个术语。

Programming without any use of assignments, as we did throughout the first two chapters of this book, is accordingly known as functional programming.



对我来说,这似乎很奇怪。

我的问题是: 可以在函数式编程的定义中考虑“没有赋值的编程”吗?

最佳答案

是的,我认为可以,尽管 Scala 和 LISP 用户可能会称其为非常狭窄的定义。但是,虽然函数式编程的一个真正定义仍然存在争议,但我们当然可以推断出一些关于没有赋值的编程风格。

我在这里假设通过赋值,我们的意思是变量的突变。请注意,这与绑定(bind)完全不同

int i;
i = 1; // overwrite whatever i is with 1

相对
let i = 1 in ....    -- say that i is a name for an expression, here 1

一旦你没有分配,就没有突变。当没有突变时,某些结构(如循环)变得无用。因为,每个变量只是一个表达式的名称,它在循环的上下文中是常量,所以循环要么永远运行,要么永远运行。拥有“变化”变量的唯一方法是将函数应用于某个值,它将参数名称绑定(bind)到该函数的生命周期内和该函数的生命周期内。进行循环的唯一方法是递归。这反过来又使函数变得非常重要,而且作为奖励,所有函数都必然是纯函数,因为没有突变。

所以,你有它:没有突变,剩下的就是用纯函数编程(如果我们不计算没有函数的声明式编程的不同方法,但事实证明这对于某些任务来说不太通用,更具体(想想 SQL,Prolog))。

现在,在我们决定(仅)使用纯函数编程是否确实是函数式编程的问题之前,我们可以得到一些爆米花。 :)

关于functional-programming - 可以在函数式编程的定义中考虑 'programming without assignment' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21307091/

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