gpt4 book ai didi

functional-programming - 考虑到没有副作用的愿望,在函数式语言中使用数据库的最常见模式是什么?

转载 作者:行者123 更新时间:2023-12-04 03:01:58 25 4
gpt4 key购买 nike

我正在尝试了解功能语言的核心概念:

“函数式语言的一个中心概念是,函数的结果由它的输入决定,而且只由它的输入决定。没有副作用!”

http://www.haskell.org/haskellwiki/Why_Haskell_matters#Functions_and_side-effects_in_functional_languages

我的问题是,如果一个函数只在其本地环境中进行更改并返回结果,它如何与数据库或文件系统交互?根据定义,这不是访问实际上是全局变量或全局状态的内容吗?

用于解决或解决此问题的最常见模式是什么?

最佳答案

在函数式语言中处理副作用和杂质的最常见模式是:

  • 务实,不是纯粹主义者
  • 提供允许不纯代码和副作用的内置函数
  • 尽量少用!

  • 例子:
  • Lisp/方案:set!
  • Clojure:引用,并在 java 对象上使用变异方法
  • Scala:使用 var 创建变量
  • ML:不确定具体情况,但 Wikipedia说它允许一些杂质


  • Haskell 有点作弊——它的解决方案是对于访问文件系统或数据库的函数, 整个宇宙在那一刻的状态 ,包括文件系统/数据库的状态,将被传递给函数。(1) 因此,如果你可以复制 整个宇宙在那一刻的状态 ,那么您可以从这样的函数中获得两次相同的结果。当然,你不能复制 整个宇宙在那一刻的状态 ,所以函数返回不同的值......

    但是 Haskell 的解决方案,恕我直言,并不是最常见的。

    (1) 不确定这里的具体情况。感谢 CAMcCann 指出这个比喻被过度使用,而且可能不是那么准确。

    关于functional-programming - 考虑到没有副作用的愿望,在函数式语言中使用数据库的最常见模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8406261/

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