やぐブロ

yag + programming + hateblo

Clojure閑話

最近全然プログラミング出来ていなくて書くこともないので,Clojureで気になるポイントや4Clojure.comの途中経過を書くことにする.
f:id:yag_ays:20120213234319p:plain
Easyでもちょっと大変になってきたが,あとは問題をこなしていくだけという感じもある.まだMediumに手を出していないが,頑張れば解けそう(だと思いたい).


Clojureプログラミングに関して

  • アルゴリズムを当てはめる/再発明する/組み合わせる
    • 入力形式と出力形式は決まっている
    • 処理の部分を考えるのが問題なのだが,大抵は入力のデータ形式をどう変形していくかを考えるのと同義
    • データ形式にあった関数を適応することが大事
    • 特殊な例に特化した関数を使えば簡単なこともあるけれども,使わなくても処理を考えれば書ける(4Clojureでは関数を再実装する問題が多い)
    • 何も考えずに書くならloop&recurとかでゴリ押しする

このへんはLISPの哲学なりClojureの便利な機能を見ると納得する部分が多そうなので,あとでプログラミングClojureを読み返そうと思う.



4Clojureについて

  • 人の解答を見ると非常に勉強になる
    • ElementaryやEasyだと一つの関数で簡潔に書ける場合が多く,特殊な用途に用いる関数を知ってるかどうかみたいな問題もある
    • 泥臭く解いてから他人の解答を見ると関数1つであっさり解いている場合もあり,様々な関数を知る良い機会になる
    • 特殊な関数で簡潔に書いている解答を見て「それで書けるのね」で終わるのではなく,データ形式をどういう視点で観るかという裏の部分が大事
    • 実際にコードをステップごとに動かして見て,データがどう変わっていくかを確認すると面白い
    • 同じような泥臭いコード書いている人を見かけると親近感が湧く(良くない


Clojure歴がようやく1ヶ月になって,ちょっとはClojureのことが解ってきたかもしれない.関数型言語に慣れるのが精一杯で,最初のうちは問題を前にして全く手を付けられないということが多かったのだが,次第に取っ掛かりはつかめるようになってきた.最近では,ゴリ押しで書くか,それとも関数を組み合わせて綺麗に解くか...といった感じで色々と手札を眺めて考えるのが非常に楽しい.