Blogを新調しました。
新しいURLは、"http://blog.s-amemiya.com/"です。
今後はリンク先の方を更新していきます。
Mac OS XにMacPortsを使ってGCCをインストール
Mac OS XにMacPortsを使ってGCCをインストールした時のメモです。
まずMacPortsでインストールできるGCCのバージョンを検索します。
$ port search gcc
...
gcc44 @4.4.5 (lang)
The GNU compiler collectiongcc45 @4.5.2 (lang)
The GNU compiler collectiongcc46 @4.6-20101218 (lang)
The GNU compiler collection, prerelease BETA
...
今回はgcc45を選択してインストールしました。
$ sudo port install gcc45
MacPortsは、インストールしただけだとコマンドの後ろにバージョンが付いてます。
今回はシンボリックリンクを作成しました。(以下はg++の例)
$ cd /opt/local/bin
$ sudo ln -s g++-mp-4.5 g++
これでGCC 4.5.2のg++コマンドが使えるようになりました。
C#のforeach内で現在のループ回数を知る
こちらで紹介されていたのを、自分でも書いてみました。
http://mag.autumn.org/Content.modf?id=20100726164321
http://blogs.wankuma.com/rti/archive/2010/07/27/191691.aspx
http://d.hatena.ne.jp/okazuki/20100728/1280300415
foreachの中で現在のループ回数を知りたい時に、Selectメソッドを使うことで次のように書くことができます。
using System; using System.Linq; public class Program { static void Main() { var lines = new[] { "abc", "def", "ghi" }; foreach (var line in lines.Select((v, i) => new { Index = i, Value = v })) { Console.WriteLine("lines[{0}] = \"{1}\"", line.Index, line.Value); } } }
実行結果:
lines[0] = "abc"
lines[1] = "def"
lines[2] = "ghi"
他にもSelectなどのEnumerableから提供されているメソッドで使えるようです。
前後の要素同士でペアを作って反復処理
コレクションの前後の要素同士でペアを作って反復処理するメソッドを、拡張メソッドで実装してみました。
using System; using System.Collections.Generic; static class EnumerableExtension { public static void ForEachPair<T>(this IEnumerable<T> collection, Action<T, T> action) { if (collection == null) { throw new ArgumentNullException("collection"); } if (action == null) { throw new ArgumentNullException("action"); } var enumerator = collection.GetEnumerator(); if (!enumerator.MoveNext()) { return; } var previousValue = enumerator.Current; while (enumerator.MoveNext()) { action(previousValue, enumerator.Current); previousValue = enumerator.Current; } } } class Program { static void Main() { var numbers = new[] { 0, 1, 2, 3, 4 }; numbers.ForEachPair((x, y) => Console.WriteLine(x + y)); } }
このコードでは、0から4までの配列に対して、前後の要素同士を足してコンソール出力する処理をしています。
実行結果:
1
3
5
7
Scalaのif式
Scalaのif式は、他の多くの言語とほぼ同じ動作をしますが、戻り値を持っているのが特徴です。
まず戻り値を使わないケースを書いてみます。
object IfTest { def main(args: Array[String]) { var visitor = "anonymouse" if (!args.isEmpty) { visitor = args(0) } println("Hello " + visitor + '.') } }
プログラムの引数に挨拶するだけのプログラムです。
引数が無い時は、"anonymouse"に挨拶します。
次に、上で書いたプログラムを、if式の戻り値を利用するように書き換えてみます。
object IfTest2 { def main(args: Array[String]) { val visitor = if (args.isEmpty) "anonymouse" else args(0) println("Hello " + visitor + '.') } }
ifの条件式がtrueならば"anonymouse"、falseならば引数の0番目の要素でvisitorを初期化します。
varで宣言していた変数visitorをvalで宣言出来るのも、メリットのひとつですね。
Visual Studio 2010 RC 一般公開
Visual Studio 2010 RC が、こちらで公開されています。
日本語版が公開される予定はないようです。
F#でHello world
Windows環境の場合:
- ここから"InstallFSharp.msi"をダウンロードする
- ダウンロードした"InstallFSharp.msi"を実行し、インストールする
- インストールしたフォルダの下の、binフォルダの中にある"fsi.exe"を実行(デフォルトでは"C:\Program Files\FSharp-1.9.7.8"\bin\fsi.exe")
- コンソールにコードを書いてエンターキーを押すと、プログラムが実行される
例えば手順4で次のように入力し実行すると、
printf "Hello world!";;
コンソールには次のように表示される。
Hello world!val it : unit = ()