Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Functional programming 所有循环和if语句都可以被map、filter和reduce替换吗?_Functional Programming - Fatal编程技术网

Functional programming 所有循环和if语句都可以被map、filter和reduce替换吗?

Functional programming 所有循环和if语句都可以被map、filter和reduce替换吗?,functional-programming,Functional Programming,有人告诉我你大部分时间都可以这样做,我想知道是否有某种证据证明你一般都可以这样做。(假设我们使用的是像Python这样的语言,它有map、filter和reduce函数。)假设您可以将任何函数传递到map,filter和reduce,是的。你可以用它做任何事情(尽管有些可能需要一些技巧) 例如,一个稍难模拟的示例,因为您需要保存状态(可以使用reduce完成,但不能在1语句中完成): 功能变体: min_ = reduce(lambda x, y: min(x, y), items, items

有人告诉我你大部分时间都可以这样做,我想知道是否有某种证据证明你一般都可以这样做。(假设我们使用的是像Python这样的语言,它有map、filter和reduce函数。)

假设您可以将任何函数传递到
map
filter
reduce
,是的。你可以用它做任何事情(尽管有些可能需要一些技巧)

例如,一个稍难模拟的示例,因为您需要保存状态(可以使用reduce完成,但不能在1语句中完成):

功能变体:

min_ = reduce(lambda x, y: min(x, y), items, items[0])
max_ = reduce(lambda x, y: max(x, y), items, items[0])
sum_ = reduce(lambda x, y: x + y, items, items[0])
avg = sum_ / len(items)
实际上。。。在1个reduce语句中想到了一种方法:

min_ = max_ = sum_ = items[0]
i = 0.
for item in items:
    i += 1
    min_ = min(item, min_)
    max_ = max(item, max_)
    sum_ += item
avg = sum_ / i
min_, max_, sum_ = reduce(lambda x, y: (min(x[0], y), max(x[1], y), x[2] + y), items, [items[0]] * 3)
avg = float(sum_) / len(items)

可以传递哪些函数?我可以通过映射一个虚拟的单元素列表并使用ifs和循环传递任意代码来欺骗您的问题陈述。