Functional programming 为什么函数式编程语言编写的代码比其他编程语言编写的代码短?

Functional programming 为什么函数式编程语言编写的代码比其他编程语言编写的代码短?,functional-programming,paradigms,Functional Programming,Paradigms,许多人说函数式编程语言编写的代码比其他编程范式语言编写的代码要短。但为什么呢?一个重要原因是更广泛地使用高阶函数。一个简单的例子是map。以下是等效的: # Procedural psuedocode result = [] for value in other_list: add somefunc(value) to result # Functional pseudocode let result = map(somefunc, other_list) 高阶函数map将迭代第一个

许多人说函数式编程语言编写的代码比其他编程范式语言编写的代码要短。但为什么呢?

一个重要原因是更广泛地使用高阶函数。一个简单的例子是
map
。以下是等效的:

# Procedural psuedocode
result = []
for value in other_list:
    add somefunc(value) to result

# Functional pseudocode
let result = map(somefunc, other_list)
高阶函数
map
将迭代第一个列表的代码抽象出来,并将函数返回值依次添加到新列表中。其他高阶函数可用于实现其他范式中更详细说明的其他技术(无论是否必要)


另一个不太常见的高阶函数是复合函数。在许多语言中,您编写的代码如下

def new_function(x):
    return func2(func1(x))

value = new_function(5)

在函数样式中,您可以编写(或拥有)一个
compose
函数来处理细节,而不必单独编写每个组合函数

def compose(f, g):
    def _(x):
        return f(g(x))

value = compose(func2, func1)(x)
有些语言,如Haskell,甚至提供了组合运算符:

value = (func2 . func1)(x)

函数式语言中有一些抽象方法,当然通常已经实现了。OO语言具有类似的特性,比如迭代器和生成器。我不确定函数式编程是否比正确的OO等价物更短。(顺便说一句:我最喜欢的语言是LISPs)
value = (func2 . func1)(x)