什么是函数式编程思维

默认分类 未结 1 1262
0oo大叔
0oo大叔 2023-04-15 08:51
相关标签:
1条回答
  • 2023-04-15 09:35

    试着把函数想象成一个根据一个指定输入产出指定输出的黑盒,就能简化成逻辑电路中的各种门的样子或者是各种流通管道的样子。然后试想数据通过这些组合起来的管道/门,变成你要的结果。或者是通过现有的管道或门,构建(抽象)出更复杂/更通用的管道/门。这就是函数式编程。任何支持函数的语言都可以进滑收行函数式风格的编程 注意360问答到与命令式风格不同的是没有赋值,这意味着reason 程序的时候每个变量的值是不变的 不用考虑程序变量随着时间的变化 -- 大大降低了程序的复杂性。既然C/C++(98) 也能进行函数式风格的编程 为什么不认为它是一门函数式语言呢,因为需要容易的进行函数式编程需要以下几个语言特性支持clos房少导预款酒掌片苗都树ure按照上面的三条规则函数式是first class 的 是可以直接传递作为参数的,而因为lambda坐***而教至更演算作用于是lexical scope 的,variable capture 意味着语言要支持GC才能更方便的操作。 这意味着像Java(8以前), C/C星假度该式几费棉确++ 这两门工业界语言函数式编程并不非常适美派怎装统合.2. 高阶类型推断因为函数可以作为参数,其类型可以非常复杂 比如下面的函数类型其实非常普遍:val callCC : (('a -> 'b -> 'c) -> ('a -> 'c) -> 'd) -> ('a -> 'c) -> 'd如月石述对伟果没有类型推断,其实很难写对或者理解它的语义3. tail-call因为函数式风格没有赋值,也就没有for循环, 要实现循环操作 只能通过递归调用, 比如下面简单的例子:let rec even n = if n = 0 then true else if n = 1 then false else odd (n - 1)and odd n = if n = 1 then true else if n = 0 then false else even (n - 1)这需要编译器保证上面的例子不能有stackoverflow 能提供这样保证的编译器并不多,比如所谓的 "函数式" 语言scala 就不能提供这种保松时普电量动川鲁换证 也就实际上不是函数式语言.相比函数式风格我觉得更重要的一个语言特性的时代数数据类型和模式匹配

    0 讨论(0)
提交回复