新規ドキュメント


忘れていく脳のための備忘録
by w_l_s
プロフィールを見る
画像一覧

vim のプラグイン管理に vundle を使う

今まで、同僚から vim-update-bundle という Ruby 製の管理スクリプトを教えてもらい、使ってきた。使うのに Ruby をインストールする必要があるのと、スクリプトを実行しないとプラグインの取得、更新が出来ないのがちょっとネックだった。

最近知った vundleは、そんな不満を解消してくれる。

単体で動作する vim スクリプトなので、 Ruby をインストールする手間ふぁ無いこと、コマンドを実行する必要があるけど、vim の中で実行でき、実行後はインストールしたプラグインがすぐ実行できるところがいい。

インストール方法hは github から取得してきた README に書いてあるのでそれを読もう。
使い方も README でばっちりさ。

vim-update-bundle と vimrc の書き方が違うので、移行する場合は書式に気をつけよう。
これで少しはまった。コロンいらないんだね。
[PR]
by w_l_s | 2011-05-23 00:36

関数の評価順

オライリー本の最初でつまずいた。
エクササイズの 3-3 で、偶数なら表示しろという問題が出てきたので、以下のプログラムを書いた

-module(print).
-export([print/1, print/2, even_print/1, even_print/2]).

print(N) when N > 0 ->
print(1, N).
print(C, N) when C < N ->
io:format("Number:~p~n", [C]),
print(C + 1, N);
print(C, N) when C == N ->
io:format("Number:~p~n", [C]).

even_print(N) ->
even_print(1, N).
even_print(C, N) when (C rem 2) == 0 ->
io:format("Number:~p~n", [C]),
even_print(C + 1, N);
even_print(C, N) when (C rem 2) /= 0 ->
even_print(C + 1, N);
even_print(C, N) when C == N ->
print(C, N).

これで even_print() を動かすと、無限に表示を続けてしまう。
どうやら、ソースコードの上から順番にガードを評価して関数を選んでるみたい。


-module(print).
-export([print/1, print/2, even_print/1, even_print/2]).

print(N) when N > 0 ->
print(1, N).
print(C, N) when C < N ->
io:format("Number:~p~n", [C]),
print(C + 1, N);
print(C, N) when C == N ->
io:format("Number:~p~n", [C]).

even_print(N) ->
even_print(1, N).
even_print(C, N) when C == N ->
print(C, N);
even_print(C, N) when (C rem 2) == 0 ->
io:format("Number:~p~n", [C]),
even_print(C + 1, N);
even_print(C, N) when (C rem 2) /= 0 ->
even_print(C + 1, N).

順番を変えて、最初に C == N かどうかを確認させたら意図した動きになった。

ガードの中身を考え直すか、関数で条件分岐するべきかな?
[PR]
by w_l_s | 2011-05-20 01:05 | erlang

カテゴリ

全体
erlang
Python
c言語
作って遊ぼう
シェルスクリプト
OS
javascript
jQuery
反省
vim
未分類

お気に入りブログ

メモ帳

最新のトラックバック

ライフログ

検索

タグ

ファン

記事ランキング

ブログジャンル

画像一覧