让我远离像Lisp这样的函数式语言的一个原因是我不知道如何进行'原始'数组迭代。比如,我在C中有一个数组,表示屏幕像素的RGB值。在C语言中使用for循环更改颜色是微不足道的,但是如何在Lisp中优雅地执行此操作?
编辑:
抱歉,我没有正确地表达我的问题。 在C中,当我想在屏幕上改变颜色时,我只是在数组的一部分上写一个for循环。 但在方案,clojure或haskell中,所有数据都是不可变的。因此,当我更改矩阵的一部分时,它将返回一个全新的矩阵。这有点尴尬。是否有一种“干净”的方式来改变矩阵的一部分的颜色而不会在整个数组上进行递归并进行复制?
答案 0 :(得分: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.
(在Haskell中)。
这种递归形式很常见,在大多数库中都称为map
。
答案 1 :(得分:0)
To" iterate"通过像Lisp这样的语言中的数组是一个简单的映射。
结构为(map f x)
,其中f是要应用于列表/数组x的每个元素的函数。