読者です 読者をやめる 読者になる 読者になる

yy_taroのとりとめのない落書き

メインフレームの導入・設計・構築ができるぐらいの知識があったりする。

すごいH本を読んでます。(ただし、肌色は少なめ?)

すごいH本を読んでます。

これはすごいですね。

肌色分は少ないのですが、とても興奮します。

ちなみにそのすごいH本のタイトルは、「すごいHaskell楽しく学ぼう!」です。

はい。

これをやりたくて購入したところも若干ですがあります。

で、本当のところを言うと、そもそもHaskell自体は、なんだか高貴な感じがして、ちょっととっつきにくそうなイメージを勝手に持っていました。

そんな時、本日書店にて何気なく手に取り読んでみたところやっぱりとっつきにくそうでした。

がしかし、ある関数を見て、これはと思い。

気がつくと手に取っていました。

そのある関数とは、クイックソートです。

なんて事はないありふれたものではありますが、これがすごかったのです。

どれくらいすごいかというと

例えば、C言語で実装してみると

void quick_sort(int* pArray,int left,int right){
    int i,j,pivot;
    if(left >= right) return;
    pivot = pArray[left];
    i = left;
    j = right;
    while(true){
        while(pArray[i] < pivot) i++;
        while(pArray[j] > pivot) j--;
        if(i >= j) break;
        swap(pArray,i,j);
    }
    if (left < i - 1) quick_sort(pArray, left, i - 1);
    if (j + 1 < right) quick_sort(pArray, j + 1, right);
}

void swap(int* pArr,int i,int j){
    int tmp = pArr[i];
    pArr[i] = pArr[j];
    pArr[j] = tmp;
}

こんな感じです。(若干やっつけで作ったので動かないかもしれませんが雰囲気が伝われば・・・)

そして、これがHaskellで実装すると

quicksort :: (Ord  a) => [a] -> [a]
quicksort [] = []
quicksort (x:xs) =
    let smallerOrEqual = [a | a <- xs, a <= x]
         larger = [a | a <- xs, a > x]
    in quicksort smallerOrEqual ++ [x] ++ quicksort larger

こうなります。

Haskellに限らず関数型の言語であればこれくらいになりそうではありますが、これを見た瞬間一気に興味がわき今に至ります。

まださわりの部分しか読んでいませんが、Haskellに触れてみると以外と面白いですね。

関数型の言語自体は、いくつか手を出しているのでそんなに難しいとは感じません。

これからすごいH本を読み進めていこうと思います。

しかし、最近いろいろなものに手を出して収拾がつかなくなってきてる・・・。

まあいっか。

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!