swiftのクロージャで多重ループを簡単に書いてみる


Cで多重ループを簡単に書こうとすると以下のようにマクロでfor文を定義することができました。
これは多重ループを多用するような3Dの処理などでは、このようなソースをよく見ます。
ただし、C90ではコンパイルできなかったり、最近のswiftをはじめとしたナウでヤングな言語ではマクロで処理を記述できないのが一般的になっていると思います。

nested_loop.c
#include <stdio.h>
#include <stdlib.h>

#define N 10
#define START_LOOP for(int i=0; i < N; i++){\
                   for(int j=0; j < N; j++){\
                   for(int k=0; k < N; k++){
#define END_LOOP }}}

int main(){
    START_LOOP
        printf("%d %d %d\n",i,j,k);
    END_LOOP
}

これをswiftのクロージャで書くとこんな感じに定義することができます。

nested_loop.swift
let N = 10;

func nested_loop(closure:(Int,Int,Int)->()){
  for i in 0..<N {
    for j in 0..<N{
      for k in 0..<N{
        closure(i,j,k)
      }
    }
  }
}

nested_loop({(i,j,k) in
  print(i,j,k)
})

nested_loop({
  print($0,$1,$2)
})

これと同じようにC#のParallel.For文のようなこともできるかもしれません。(使ったことないけど)
関数型言語はよくわかりませんが、こういう感じに今までの処理を置き換えていくと見えてくるものがあるかもしれないですね。