スタック食わない再起って怖くね?
巷で話題のElixirを触ってみました。
カジュアルErlang的ポジションだそうで、関数型言語なのでした。
末尾再帰がスタックを消費しないというのはErlangとかScalaと同じなのですが、
引数の型チェック忘れて何度か無限ループやっちゃいました。
ちゃんとガード式つけましょうね。
def recursive(n) when is_integer(n) do recursive(n, []) end defp recursive(n, acc) do #do_something end
みたいな。
文字列の扱いググろうとして「elixir string」って検索するとギターの弦ばっか出てくるのはどうしたもんかね。
Cannot load such file -- openssl (load error)
Ruby2.0を入れたらgemさんがタイトルみたいなエラーを出した。
ぐぐってもみんな「rvmが ... 」と書いてるので困っちゃうぜ。
結局、こんな感じで。
# apt-get install libcurl4-openssl-dev # cd ext/openssl # ruby extconf.rb # make # make install
あ、環境はUbuntuの10.04でした
apt-getがコケる
とあるVPSを契約して、「まずはコレっしょ」ということで
# apt-get update
ってやったら
Ign http://archive.ubuntu.com maverick-security/... Ign http://archive.ubuntu.com maverick-security/... Ign http://archive.ubuntu.com maverick-security/... Err http://archive.ubuntu.com maverick/... 404 Not Found [IP: ... Err http://archive.ubuntu.com maverick/... 404 Not Found [IP: ...
みたいなのがバーっと出てうまく行きましぇん。
VPSだから色々制限があるのかなー?と思ったんですが、
よくよく思えばこのOSはちょっと古めのUbuntuなのでした。
ということで/etc/apt/sources.listを編集。
deb http://archive.ubuntu.com/...
となっているところを
deb http://old-releases.ubuntu.com/...
として再度update。めでたし。
kotlinしてみた
ずっと更新サボっちゃいました。はい。
この頃、新しい言語を学びたい欲が少々ございまいして、ちょっとkotlinを触ってみました。
こんなデモが用意されてて、練習できるようになってるんですねー。
しかしまあローカルで動かしたいですよねってことで、こちらを読んでコンパイラを落とし、Hello Worldする。
fun main(args: Array<String>) { println("Hello.") }
Hello.ktで保存して、えいっ
$ ./kotlinc/bin/kotlinc-jvm -src ./Hello.kt -output . ERROR: kotlin/Hello.kt: (2, 3) Unresolved reference: println exec() finished with COMPILATION_ERROR return code
むー。どーいうこった。printlnが理解されない。
試しに、
fun main(args: Array<String>) { System.out.println("Hello.") }
ってやったらコンパイルできた。
んでもって
$ java -classpath kotlinc/lib/*:. namespace
Hello.
できた。でもSystem.outとかいちいち書いてたら、最初からJava使え的な感じですよね。
importとかすればいいんですかね。
色々試したけどよく分からんかったので、おとなしくintelliJ IDEA入れましょうかねぇ。
いまさら気づいたこんなこと
普段の作業では、文章中の単語の出現回数とか数えることがよくあるのですよ。ボク。
Hashを使って、単語がキーで回数が値とかやるわけですが、初出現の単語がくるとhash[key]はnilと評価されて足し算がmethod_missingとなるので
if count[w].nil? count[w] = 1 else count[w] += 1 end
とか
count[w] = count[w].nil? ? 1 : count[w]+1
とかやってたんですよ。
もっとスマートに書けないかなーと思っていたら、むっさ簡単に書けるじゃないかコンチクショー(# ゜Д゜)ー!
count[w] = (count[w] || 0) + 1
count[w] = (count[w] or 0) + 1
なぜ今まで思いつかなかったのか…
2012/11/14 追記
こういう書き方はnilガードって言うらしいです。