使用“递归”概念迭代函数式编程中的集合数据

时间:2017-07-25 04:38:47

标签: loops oop recursion functional-programming

我阅读了一些论文和文档,其中说功能编程使用“递归”概念来迭代集合数据,而OOP使用“循环”概念来迭代集合数据(例如: - Java中的for-each循环)。所以我对这个说法感到困惑。我有三个问题

  • 在功能编程中使用“循环”是一个好习惯吗?
  • 如果没有,有谁能告诉我应该用什么方法?
  • 有人能举例说明两种迭代收集数据的方法吗?

1 个答案:

答案 0 :(得分:1)

你的问题有点不清楚,例如

  

在函数式编程中使用“循环”时这是一个好习惯吗?

在函数式编程语言中,循环结构会是什么?一些函数式编程语言缺少显式循环语句(for-each,for,while,do-while,...)

无论如何,按顺序:

  

在函数式编程中使用“循环”时这是一个好习惯吗?

任何使用命令式表达循环的尝试通常被认为是一种糟糕的做法。如前所述,许多函数式编程(FP)语言缺乏这样的结构。

  

如果没有,谁能告诉我应该用什么方法?

您可以在维基百科上阅读recursion

许多数据结构(如列表)本质上是递归的,因此递归迭代它们应该感觉相当自然。

  

有人能给我一个例子和比较两种迭代收集数据的方法吗?

让我们使用一些伪代码遍历列表,

势在必行的风格

映射到不同循环结构的几个命令性示例。

对于-每个

list = [1, 2, 3]

for element in list:
    print element

虽然

len成为返回列表长度的函数,让列表为零索引,以便list[0] == 1

list = [1, 2, 3]
i = 0

while i < len(list):
    print element
    i++

功能风格

使用递归:

head(list)成为返回列表第一个元素的函数,tail(list)返回头后的所有元素

list = [1, 2, 3]

def loop(list):
   if list == []: # Check if the list is empty
       return

   print head(list)
   loop(tail(list)) 

还有其他方法可以在许多FP语言中迭代列表,最值得注意的是map和列表推导,但我现在就把它排除在外。