Windows Dev. Site

WindowsストアアプリでF#

最近のLINQネタの勢いで、F#に手をだしてしまいました。これまでLisp, Haskell, Clojure, Scalaなどなど関数型言語の勉強はしつつも、なかなか使う機会がないので、まったく身につきませんでした。本ばかりがたまる一方です。そして今度はF#。また同じ運命をたどるかも。
しかし今回は、Windowsストアアプリでも使えるということで、具体的な形になる可能性が高いという期待があります。(最近の流れからして動機としては十分です。)F#だけですべてを作るのではなく、C#から呼び出す形でデータ操作を専門にする使い方なら、かなり実用性があるのではと感じました。
オブジェクト指向言語は、WindowsなどのGUIの出現とともに必要とされ生まれ、そして関数型言語はインターネット時代、CPUマルチコア時代に必要とされ生まれてきたのでは、と思っています。最近の他の言語の傾向を見ていても、その必要性が今まで以上に感じられるようになってきました。
xamlListbox1
サンプルは、C#+XAMLのWindowsストアアプリから、正規表現の部分を記述したF#の関数を読んでいます。
結果は、ListBoxに書き出します。
正規表現の部分は、「実践F#関数型プログラミング入門」(技術評論社)を参考にしました。

環境 : VisualStudio 2012 / Windows 8

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

namespace csfsStoreXaml02
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
        }
        private void Button_Click_3(object sender, RoutedEventArgs e)
        {
            var t = Module1.test3("ABC123-456,789");

            foreach (var v in t)
            {
                listBox1.Items.Add(v);
            }
        }
    }
}
module Module1
open System.Text.RegularExpressions

let re = Regex("[0-9]+")
let test3 x = 
    re.Matches(x) 
    |> Seq.cast<Match> 
    |> Seq.map(fun m -> m.Value) 
    |> Seq.toList

これが積極的に業務でも使えればいいのですが、まだ難しい状況が続くことと思います。それはあまり使われない言語を使うと保守性が悪くなるため、これを嫌う傾向は強いからです。これは十分理解できます。
最近Rubyですら使えないことがありました。データコンバートのツールを作るとき、開発時間でJavaの1/4くらい、コード量では約半分でしたが、Javaで作ることになりました。実際はプロトタイプはRubyでつくり、それをJavaに移植した後作りこみ、という形でやりましたが、基本仕様がすでに動いているということは、とても心強かったです。
F#もこのような使い方ができれば意義あることかもしれません。

ちなみに現在開発中のWindowsストアアプリとは、F#はまだまだということで、JavaScript+SVGのものと、C#+XAMLです。
しかし最近のMicrosoftの言語環境は、本当にマニアックすぎる!?