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

Clojure環境構築

Programming Clojure

Clojureとは

LISP一族の一番ナウくて新しいこ 得意技:並列処理、遅延評価

Hello Worldまで

  1. Clojureのビルド・パッケージマネジメントツール、Leiningenをもってくる。ライニンゲン、と読もう。

  2. lein replで対話環境の起動

結構おもたい。

3.Hello World

(print "Hello World!")

別記事で、 Clojure - Functional Programming for the JVM を読んでいくよ

http://java.ociweb.com/mark/clojure/article.html

Land of Lispを読んでいる。

programming Common Lisp Ruby

他にも色々やらなきゃいけないことがあるはずなのに。 とてもおもしろいです。悟りまではまだまだ長い。。

関数型パラダイムが云々みたいな議論に参加する気合はないですが、少なくとも他の言語、特にRuby,を書くときはなんだか頭がフレッシュな感じになる感覚は少しわかるかも。 オブジェクトに対するメッセージングか関数呼び出しかで向きが逆になるのがね。なんともですが。

本文中コードを書いてもただの写経なので、自分のLispのアウトプット能力を確認してみる。

(defun iota (current limit step)
  (if (> current limit)
      nil
      (cons current (iota (+ current step) limit step))))

(defun fizzbuzz (n)
  (cond ((zerop (mod n 15)) "FizzBuzz")
        ((zerop (mod n 3)) "Fizz")
        ((zerop (mod n 5)) "Buzz")
        (t                  n)))

(defun fizzbuzzing (list)
  (if list
      (progn (princ (fizzbuzz (car list)))
             (fresh-line)
             (fizzbuzzing (cdr list)))
      (fresh-line)))

(fizzbuzzing (iota 1 100 1))

後述のrubyのほうが短くてしゅっとしてるけど、再帰的に書くことを意識しますた。

iota 関数でまず引数limitまでの数列のリストを作ります。数列生成の関数をiotaって言うのはなんでなんでしょう。

fizzbuzz関数は、コアになるロジックで、引数に整数をとり、値の15,3,5のmodで条件分岐します。

fizzbuzzing関数は、数列をひたすら右に向かってfizzbuzzしてく再帰関数です。

トップレベルでiotaで作った数列をfizzbuzzingに流して終了。

もっと関数っぽいっていうか宣言的に書ける方法があるような気がします。自然数列とFizzBuzz数列は全単射なわけで...

def fizzbuzz(n)
  str = ""
  str << "Fizz" if (n % 3).zero? 
  str << "Buzz" if (n % 5).zero? 
  str.empty? ? n : str
end

p (1..100).map {|n| fizzbuzz n }

rubyのほうが楽ちんという説は確かにある。

fizzbuzz = -> n {
 n % 15 == 0 ? "FizzBuzz" : 
 n % 3 == 0 ? "Fizz" : 
 n % 5 == 0 ? "Buzz" : 
 "#{n}" 
}
p (1..100).map &fizzbuzz

こんなのもありとどこかの記事を見ていて知った。 色々かっこいい。

追記。

fizzbuzz = -> (n){ "#{"Fizz" if n % 3 == 0}#{"Buzz" if n % 5 == 0}" }
(1..100).each { |n| p fizzbuzz.(n).empty? ? n : fizzbuzz.(n) }

これが一番かっこいいわ。個人的には。

カレントディレクトリのパスをそのままクリップボードにコピーしたい

tips unix mac

requirement

how to

echo -n `pwd` | pbcopy

このエイリアスを.*shrcにでも加えればよいのでは。

alias path='echo -n `pwd` | pbcopy'

そんだけだよ。 地味に使いドコロは多いきがする

最近読んだ本とか

reading_notes

一般向けっぽいので。

BLUE GIANT

仙台出身の高校生がテナー・サックス奏者を目指していく話。既刊5巻まで。 久しぶりに真面目に最近の漫画読んだ。

『岳』の石塚真一氏。 わりと問答無用で面白い。

リーンスタートアップ

スタートアップ、web界隈にいる人できちんと手順踏んでる人は、職種に関わらず読んでるような本。 主にイノベーティブな仕事をするために、どうすればいいのか、の指針。事例と共に。 経営学系の本は往々にして、自身が経営者でなくとも、生き方・仕事のしかた、問題解決時の大枠の戦略論に役立つと思う。

最近読んだというより大分昔だけど、このエントリで紹介してる本の話をしているついでに出てきた。

ハッカーと画家 コンピュータ時代の創造者たち

ハッカーってどれぐらいセクシーな職業か? ハッカーの生態ってどんなもん? みたいな話。ビジネス方面にも跨がる。(作者は、YCombinatorっていうベンチャーキャピタルの創始者) 微妙にプログラミング的な話も出てくるからテキトウに読み飛ばせばいいけど、中々魅力的な文章が多くて、楽しい。 プログラマでなくとも、良い仕事したいかも、って思わせる本。


小説っぽいのでいうと

もし僕らのころばがウィスキーであったなら

村上春樹のエッセイ。アイラ島に行きたくなる。 久々に読むと村上春樹の文章、高二病っぽくておうおうおうってなるけど、でも丁寧。 穏やかだけどセンスビンビンで生きていきたい。


evernoteと同期できるブラウザベースでないmarkdownエディタ探してる。 ない。 作るかな。。