タグ別アーカイブ: programming

Scala関西ビギナーズ 第1回 に参加しました!


前から気になっていたプログラミング言語 scala を勉強してみようということで参加してきました。
初心者向けということで、言語の特色や関数型言語の説明の後にはProject Euler (プロジェクトオイラー)という数学の問題サイトをもとにScalaに触れ合って行く感じの勉強会でした。やっぱり、勉強会で実際に実装するのは楽しかった!!!!

Scala関西ビギナーズ 第1回
開催日:2012年12月22日(土)


セッション中のメモ

  • イミュータブル(状態を変えないこと)を重要視している・・・変数(var)よりも定数(val)を

  • メソッドの引数の書き方が特殊。
    以下の2つのメソッドは同じ意味のメソッド。
    引数の2つあることを表す.カッコで引数を区切ることが出来る。

def hogeList(num: Int)(limit: Int): List[Int] = {
    println(num + limit)
    return List(num, limit)
}

def HogeList(num: Int, limit: Int): List[Int] = {
    println(num + limit)
    return List(num, limit)
}

お役立ちサイト
Courser(英語)
Scala Cookbook
hishidamaさんのブログ


ScalaのVim環境

実際にScalaを書いてみようということで、始める前の作業として、、
コンパイル言語でも僕の場合、IDEを使う程でもない時はVimを使うようにしています。まずはVimの環境ということで、シンタックスカラーと補完の設定を入れてみました。

  • Vim Scala統合環境の構築
    vim , scalaの統合環境として、vim-scala というプラグインを入れました。
vimrcに以下の内容を定義
% vim ~/.vimrc
Bundle 'derekwyatt/vim-scala'


インストールを実行
% vim 
:BundleInstall


Project Eulerの第一問を解いてみました

Project Eulerの日本語化されたサイトもあります!
Project Euler 日本語

  • 第一問
    2通りのやり方をかいてみました。
    Scalaでforループを使う方法、Rangeオブジェクトを操作する方法。
    この場合も2つ目のやり方が完結で、直感的で分かりやすいですねー

[perl]配列を一意にするuniq関数、ネストされた配列をフラットにする関数を書いた


経緯

タイトルに上げている関数を自分なりに書いてみたので、載せてみようと思います。
というのもこういうアルゴリズムの課題って、日々意識して置かないと、いざ書いてみようと思うとなかなか書くことが出来ないですよねー。。普段はプログラミング言語に用意されていたら、それ用のモジュールがあったりするので、アルゴリズムを意識しなくても同様の動作する関数はどこかしらから拾ってこれるので。。。

そういうゆるゆるにならないためにも、ちょっとずつでもこういう簡単なアルゴリズムは身につけられるように、、言語の勉強も兼ねて書いていこうと思いましたー!!


概要

以下の2つを実装してみました。

  1. 配列を一意にするuniq関数
    重複のある配列から重複を取り除いた形式の配列にする。
    ( 1, 3, 4, 7, 4, 8, 1, 3 ) => ( 1, 3, 4, 7, 8 )
  2. ネストされた配列をフラットにする関数
    配列の中に配列というように、ネスト構造にある配列を一つの配列にすべての要素を含むようにする。
    perlはネスト配列は配列リファレンスでしか扱えないと思うので、以下のようにしました。
    [1, 3, [3, 0], 4] => [1, 3, 3, 0, 4]

実装

Test::Moreを使って書きました。subtestsでテストを構造化して、上記2つのパターンをテストしています。
uniq_**という関数がuniq関数で、 flatten関数がネスト配列をフラットにする処理です。

インストールしたPerlのCPANモジュールを調べる方法


インストールしたCPANモジュールって確認するコマンドがない、、、

ということで、何かしら方法はないかなーということで直接「@INC」から取得して、findする方法が結構紹介されていたので、パクってみたーーー

以下のコマンドで現在のperlに紐付いたCPANモジュールがつらつらと出力されるので、grepなどして自分の探しているモジュールがインストールされているかを確認できる!

find `perl -e 'print "@INC"'` -name "*.pm" -print

これを.zshrcや.bashrcにエイリアスとして登録すればコマンドとして使えるねー

% vi ~/.zshrc
-------------------------------------
# インストールしたCpanモジュールを出力
alias perl-installed="find `perl -e 'print \"@INC\"'` -name \"*.pm\" -print"

以上!!

備忘録 Android @Overrideで大量エラーの対処


androidでeclipseを使用している時に新たなワークスペースでインポートするときなど、
「スーパークラスのメソッドをオーバーライドする必要があります」というエラーが大量発生した場合。

よく見ると@Overrideアノテーションのところでエラーとなっている。

なんてことはない、単純にJavaコンパイラーのバージョンが1.5の場合に発生するようです。。。

Javaコンパイラーを1.6以上にしてあげると解決。。

何でだろう、Android以外のプロジェクトでは1.5でも@Override使えていたような気がするんだが??
1.6からだったんだろうかーーーーー?

参考URL:http://techbooster.jpn.org/andriod/environment/6626/

[perl]繰り返し処理のラベル


繰り返し処理にラベルを付けられる

備忘録として

以下の様にforがネストしているときに、強制的にラベルの付いたfor文を抜けるときに利用する。
サンプルで「LABEL」という名前にしているが何でもいい。
「TEST:」で「last TEST;」としても同じです。

LABEL: for my $i (@array1) {
    for my $j (@array2) {
        if ($flag) {
            last LABEL;
        }
        print "test¥n";
    }
}

last 以外にはnext,redoにも使えるらしい。。

next LABEL;
redo LABEL;

http://www.perlplus.jp/perl/for/index10.html

**ただ。。2重のネストされたfor文はなくせることが最優先!!