-1

私が Lisp のような関数型言語から遠ざかる理由の 1 つは、「生の」配列反復を行う方法がわからないことです。たとえば、スクリーン ピクセルの RGB 値を表す C の配列があるとします。色の変更は 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 に答える