[awk,Ruby,C#,Java]いくつかの言語でフィボナッチ数生成

[SQL] SQLの共通表式ではSQLでフィボナッチ数を生成した。
[python] ジェネレータとイテレータでフィボナッチではMizu A.さんにPythonでフィボナッチ数を生成してもらった。
調子に乗って、いくつかの言語の特徴的な機能を使ってフィボナッチ数を生成してみよう。

[awk]
awkは入力データの加工に適しているから自分でループするのではなく、seqの結果を使ってしまおう。

[bash]Bashでステップ実行

シェルスクリプトでステップ実行できたら、と思ったことないですか。
僕はあるよ。

と思っていたら、ここで素晴らしい説明をしてくれていた。
Shellスクリプトをデバッグ(ステップ実行)する

DEBUG擬似シグナルをtrapして、readで待てばいいんだね。

[Java][C]JavaのvolatileとCのvolatile

Javaでvolatileを使う場面は限られてくるけど、マルチスレッドの処理でパフォーマンスが問題になってくるようなときに使う。
通常のロックでは処理が重くなってしまうような場合だね。

VolatileSample.java
import java.util.stream.IntStream;

class VolatileSample {

    static class Counter {
        private volatile int count = 0;

        int getCount() {
            return count;
        }

        synchronized int increment() {
            return count++;
        }
    }

    public static void main(String ... args) {
        Counter counter = new Counter();

        IntStream.rangeClosed(1, 100).parallel()
            .forEach(x -> counter.increment());

        System.out.println(counter.getCount());
    }
}

[SQL] SQLで素数生成 existsとcaseの巻

前回はSQLフィボナッチ数列を生成したけど、調子に乗って、SQLで10000までの素数を生成してみた。
with句は整数列の生成のみに利用して、素数判定自体はSQLらしく非手続き的にするとこんな感じ。

prime.sql
with
  prime(p) as (select 3 union all select p + 2 from prime where p < 10000),
  sieve(s) as (select 3 union all select s + 2 from sieve where s + 2 < 100)
select 2 p
union all
select p from prime
        where not exists (select * from sieve where p > s and p % s = 0)
        order by p;