Functional programming 如何使用函数式语言进行迭代?

Functional programming 如何使用函数式语言进行迭代?,functional-programming,imperative-programming,Functional Programming,Imperative Programming,促使我远离Lisp等函数式语言的一个原因是我不知道如何进行“原始”数组迭代。比如说,我有一个用C表示屏幕像素RGB值的数组。在C中使用for循环更改颜色很简单,但是如何在Lisp中优雅地完成这一点呢 编辑: 对不起,我的问题措辞不正确。 在C语言中,当我想改变屏幕上的颜色时,我只需在数组的一部分上写一个for循环。 但在scheme中,clojure或haskell所有数据都是不可变的。所以当我改变矩阵的一部分时,它会返回一个全新的矩阵。这有点尴尬。有没有一种“干净”的方法可以改变矩阵某部分的颜

促使我远离Lisp等函数式语言的一个原因是我不知道如何进行“原始”数组迭代。比如说,我有一个用C表示屏幕像素RGB值的数组。在C中使用for循环更改颜色很简单,但是如何在Lisp中优雅地完成这一点呢

编辑:

对不起,我的问题措辞不正确。 在C语言中,当我想改变屏幕上的颜色时,我只需在数组的一部分上写一个for循环。 但在scheme中,clojure或haskell所有数据都是不可变的。所以当我改变矩阵的一部分时,它会返回一个全新的矩阵。这有点尴尬。有没有一种“干净”的方法可以改变矩阵某部分的颜色,而不必在整个数组上递归并复制?

用Lisp等语言“迭代”数组是一种简单的映射。
结构是
(map f x)
,其中f是要应用于列表/数组x的每个元素的函数。

在函数语言中,可以使用递归。 递归方案可以命名为

例如,要在数据数组上递归,将函数应用于每个像素,可以手动在数组结构上递归:

map f []     = []             
      -- the empty array
map f (x:xs) = f x : map f xs  
      -- apply f to the head of the array, and loop on the tail.
(在哈斯克尔)


这种递归形式非常常见,在大多数库中被称为
map

是什么让你认为Lisp是一种“函数式语言”?(c.f.)在Lisp中更为琐碎,因为循环设计模式可以抽象为合适的“映射”过程,这些过程为您执行循环。