-1

让我远离像 Lisp 这样的函数式语言的一个原因是我不知道如何进行“原始”数组迭代。比如说,我在 C 中有一个数组,它代表屏幕像素的 RGB 值。使用 C 中的 for 循环更改颜色是微不足道的,但是如何在 Lisp 中优雅地做到这一点?

编辑:

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

4

2 回答 2

1

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

例如,要对数据数组进行递归,对每个像素应用一个函数,您可以手动对数组的结构进行递归:

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在大多数库中都被调用。

于 2014-05-21T14:53:59.623 回答
0

在像 Lisp 这样的语言中“迭代”数组是一个简单的映射。该结构是(map f x)其中 f 是您希望应用于列表/数组 x 的每个元素的函数。

于 2014-05-21T11:17:51.323 回答