<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>F#</title><link>http://blogs.wankuma.com/esten/category/2303.aspx</link><description>MicrosoftのF#言語について</description><managingEditor>片桐　継（Tugu Katagiri）</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>JavaとF#で、AndroidアプリのListAdapter を書いてみる。</title><link>http://blogs.wankuma.com/esten/archive/2014/08/19/404056.aspx</link><pubDate>Tue, 19 Aug 2014 08:58:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2014/08/19/404056.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/404056.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2014/08/19/404056.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/404056.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/404056.aspx</trackback:ping><description>&lt;p&gt;Androidアプリで、リストを画面に表示したい時、用意するソースは４つ。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;リスト表示するためのListViewを含むレイアウトファイル  &lt;li&gt;リスト一行分の項目を定義したレイアウトファイル  &lt;li&gt;リスト表示するためのアクティビティクラス  &lt;li&gt;リスト一行分の項目を編集するためのリストアダプタクラス&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;この４つのファイルが必要。ちょっとメンドクサイｗ&lt;/p&gt; &lt;p&gt;でも、使い方を覚えれば簡単に色んなリストを作れるようになるので、ちょっと自慢できる、かも＜を&lt;/p&gt; &lt;p&gt;で、今回のお話の主人公は、リストアダプタクラス。&lt;/p&gt; &lt;p&gt;実はAndroidアプリの中ではお約束がとても多くて、このリストアダプタクラスなんかは典型的。&lt;font color="#9b00d3"&gt;&lt;strong&gt;リストを作りたい時には、一行分のことだけ作者は考えてればいいんだよ、という仕様になっていて、とてもシンプルにできている。&lt;/strong&gt;&lt;/font&gt;だから、作る側はそのお約束さえ守っていれば、後はAndroidさんの方で良しなにリストしてくれるの。&lt;/p&gt; &lt;p&gt;で、そのお約束なんだけど、次の事がリストアダプタクラスで定義出来ていれば動くみたい。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;BaseAdapterクラスを継承していること（継承の継承でもOK）  &lt;li&gt;保持するリスト件数を返すgetCountメソッドがあること  &lt;li&gt;保持するリストの項目を返すgetItemメソッドがあること  &lt;li&gt;保持するリストのIDを返すgetItemIdメソッドがあること  &lt;li&gt;一行分のリスト項目を返すgetViewメソッドがあること&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;こうしてできた&lt;font color="#ff0000"&gt;アダプタクラスを目的のListViewのプロパティAdapterにセットしておくと、Androidアプリのフレームワークは、getCountして取れた件数だけ、getViewを回してリストを作成してくれるし、クリックされたリストのアイテム項目をgetItemやgetItemIdを使ってアクティビティに返すようにもしてくれる。&lt;/font&gt;うん、便利だね。&lt;/p&gt; &lt;p&gt;ポイントは、基リストの保持はアダプタでやっても良いし、別のクラスで持っても良いところ。リスト生成する間、リストアダプタクラスがインスタンスをもっている間、リストが維持できていればOKだから、意外と自由。一つの基リストを色んなアダプタでリスト項目に展開することだって可能。使いこなしたい機能の一つだなって思うよ。&lt;/p&gt; &lt;p&gt;そんなリストアダプタクラス、JavaとF#で作ってみた。&lt;/p&gt; &lt;p&gt;レイアウトはresult_item, 項目は数値だけの表示リストでidをresultとして名前を付けて作ってあるとしての例ね。&lt;/p&gt; &lt;p&gt;Javaだと&lt;/p&gt; &lt;div class="insertcode"&gt;&lt;pre&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; ResultAdapter &lt;span style="color: #0000ff"&gt;extends&lt;/span&gt; BaseAdapter {
    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; List&amp;lt;Integer&amp;gt; list;
    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; Context context;
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; ResultAdapter(Context context, List&amp;lt;Integer&amp;gt; list) {
        &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.context = context;
        &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.list = list;
    }
    @Override
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; getCount() {
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; list.size();
    }
    @Override
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Integer getItem(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; position) {
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; list.get(position);
    }
    @Override
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;long&lt;/span&gt; getItemId(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; position) {
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; position;
    }
    @Override
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; View getView(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; position, View convertView, ViewGroup parent) {
        View view = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (convertView == &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.result_item, &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;);
        } &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {
            view = convertView;
        }
        Integer result = getItem(position);
        TextView resultView = (TextView) view.findViewById(R.id.result);
        resultView.setText(result.toString());
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; view;
    }
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;F#だと&lt;/p&gt;
&lt;div class="insertcode"&gt;&lt;pre&gt;&lt;span style="color: #0000ff"&gt;type&lt;/span&gt; ResultAdapter(activity : Activity, list:int[]) =
    &lt;span style="color: #0000ff"&gt;inherit&lt;/span&gt; BaseAdapter()
    &lt;span style="color: #0000ff"&gt;let&lt;/span&gt; _list : System.Collections.Generic.List&amp;lt;Java.Lang.Integer&amp;gt; =
        &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; System.Collections.Generic.List&amp;lt;Java.Lang.Integer&amp;gt;()
    &lt;span style="color: #0000ff"&gt;do&lt;/span&gt; &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; i &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; list &lt;span style="color: #0000ff"&gt;do&lt;/span&gt; _list.Add(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Java.Lang.Integer(i))
    &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.get_Count() = _list.Count
    &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.GetItem(position) = _list.Item(position) :&amp;gt; Java.Lang.Object
    &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.GetItemId(position) = &lt;span style="color: #0000ff"&gt;int64&lt;/span&gt;(position)
    &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.GetView(position, view, parent) =
        &lt;span style="color: #0000ff"&gt;let&lt;/span&gt; item = &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.GetItem(position) 
        &lt;span style="color: #0000ff"&gt;let&lt;/span&gt; view = 
            &lt;span style="color: #0000ff"&gt;match&lt;/span&gt; view &lt;span style="color: #0000ff"&gt;with&lt;/span&gt;
            | &lt;span style="color: #0000ff"&gt;null&lt;/span&gt; -&amp;gt; activity.LayoutInflater.Inflate(Resource_Layout.ResultItem, &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)
            | x -&amp;gt; x
        view.FindViewById&amp;lt;TextView&amp;gt;(Resource_Id.result).Text &amp;lt;- item.ToString()
        view&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;命名規約の問題で若干差があるけど、こんな感じ。F#の場合、JavaのObject型を使わなくてはならない分キャストがメンドイけれど、まぁクラスの一部だと考えれば、ただの変換作業なので苦も無く。Androidのクラスライブラリ群がJavaととても親和性がある、というかJavaで作られてるというのがよく判るよね。他言語で作るとなると、Javaの型を無視して作るなんて出来ないんだもの。まぁ、JNIを書いてラップして、なら出来るのかもしれないけど、ちょっとなんだか、それも違うんじゃないかなぁとか思ったり。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/404056.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>シリアライズの偉大さを知ったｗ</title><link>http://blogs.wankuma.com/esten/archive/2014/08/15/396673.aspx</link><pubDate>Fri, 15 Aug 2014 21:02:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2014/08/15/396673.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/396673.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2014/08/15/396673.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/396673.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/396673.aspx</trackback:ping><description>&lt;p&gt;SerializableAttributeAndoridアプリの画面を切り替える時、画面同士の情報の引き渡しができる仕組みがあるの。この時に、仲介役となるIntentクラスはとても大切。&lt;/p&gt; &lt;p&gt;やりたかったことは、とあるクラスに格納された情報を、画面の受け渡しに使いたいって事だったんだけど、Javaだと次の方法で出来る。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;受渡のためのクラスにSerializableを持たせる  &lt;li&gt;そのクラスを含むIntentを作成する  &lt;li&gt;StartActivityする&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;NextActivityが次に行きたいActivity、Serializedが自分で作った型だという想定で、サンプルコートだと、&lt;/p&gt; &lt;div class="insertcode"&gt;&lt;pre&gt;Serialized serialized = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Serialized();
String record_key = "&lt;span style="color: #8b0000"&gt;Key&lt;/span&gt;"
Intent intent = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Intent(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;, NextActivity.Class);
intent.putExtra(record_key, serialized);
intent.setAction(Intent.ACTION_VIEW);
startActivity(intent);&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;こんな感じ。ISerializableを持たせることで、情報を一つのクラスに取りまとめて渡せるので便利。&lt;/p&gt;
&lt;p&gt;そして、この部分で使ってるJavaDocは、&lt;/p&gt;&lt;a href="http://developer.android.com/reference/android/content/Intent.html#putExtra%28java.lang.String,%20java.io.Serializable%29"&gt;http://developer.android.com/reference/android/content/Intent.html#putExtra(java.lang.String, java.io.Serializable)&lt;br&gt;http://developer.android.com/reference/android/content/Intent.html#putExtra%28java.lang.String,%20java.io.Serializable%29&lt;/a&gt;&lt;br&gt;
&lt;p&gt;これ。確かに、putExtra( String, Serializable ) のメソッドが使えるように、作られている。&lt;/p&gt;
&lt;p&gt;で、これを今度は、F#で作る。調べたところ、C#でも同じようにクラスの宣言でISerializableを使うことができるので、出来るんだろうなと気楽に思ってた。さらに調べると、F#のtype宣言は[&amp;lt;SerializableAttribute&amp;gt;]を使うことで実現できるというところまで学習。&lt;/p&gt;
&lt;p&gt;ところが、ちょっと問題ｗ　C#やF#でいうISerializableは.NetFrameworkのものであって、Java.IOのそれではない。&lt;/p&gt;
&lt;p&gt;考えれば当たり前。&lt;/p&gt;
&lt;p&gt;そこをラップしてくれるなんていう便利なものがXamarinAPIにあればなー、なんて思って頑張ったけど、行き着いた答えがこれ。&lt;/p&gt;&lt;a href="http://developer.xamarin.com/guides/android/advanced_topics/java_integration_overview/working_with_jni/"&gt;Working With JNI | Xamarin&lt;br&gt;http://developer.xamarin.com/guides/android/advanced_topics/java_integration_overview/working_with_jni/&lt;/a&gt;&lt;br&gt;
&lt;p&gt;ラップは自分でしろ、そのためのJNIは用意してやるから（ニッコリ）と、読めたｗ&lt;/p&gt;
&lt;p&gt;つまり、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Java.IO.ISerializableをJNIした継承インターフェイスを作る 
&lt;li&gt;継承インターフェイスとSerializableAttributeをもつクラスを作る 
&lt;li&gt;putExtraでそのクラスを受渡す&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;うーん、はまりそう。深い闇というか沼の入り口に立ってる予感。とすると、逃げ道を考える。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Json化して、テキストにした後、Intent.Extras.GetSerializableメソッドでシリアライズしてputExtra 
&lt;li&gt;受渡クラスを保持するシングルトンクラスを作成し、項目を特定するIDでputExitra&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;どちらも、JNIを使わなくても、できる形。Json使うのも魅力だけど、２の方法で作ってみた。受渡したいクラスをリストで保持するシングルトンのrecordServiceを作って、メソッドGetPositionでそのリストの場所を取得できるようにしておく。&lt;/p&gt;
&lt;div class="insertcode"&gt;&lt;pre&gt;let position : &lt;span style="color: #0000ff"&gt;int&lt;/span&gt;16 = &lt;span style="color: #0000ff"&gt;int&lt;/span&gt;16 recordService.GetPosition
let activity = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Intent(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;, typeof&amp;lt;NextActivity&amp;gt;)
let extra : &lt;span style="color: #0000ff"&gt;int&lt;/span&gt;16[] = [|position|]
activity.PutExtra(record_key, extra) |&amp;gt; ignore
activity.SetAction(Intent.ActionView) |&amp;gt; ignore
&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.StartActivity(activity)&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで、とりあえず、やりたいことは実現できた。個人で好きにやってるから、こんな風なやり方したけどJson化する方がC#やJavaとの移植性が高い感じがするので、良いかもしれない。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/396673.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>Toastを焼いてみる</title><link>http://blogs.wankuma.com/esten/archive/2014/08/14/392692.aspx</link><pubDate>Thu, 14 Aug 2014 11:50:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2014/08/14/392692.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/392692.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2014/08/14/392692.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/392692.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/392692.aspx</trackback:ping><description>&lt;p&gt;Androidアプリで、好きなところ、Toastがあるところ。&lt;/p&gt; &lt;p&gt;Toastっていうのは、画面のメッセージで、下の方に出てくる、ちょっと角の円いメッセージ表示のやつね。&lt;/p&gt; &lt;p&gt;&lt;img src="http://developer.android.com/images/toast.png"&gt;&lt;/p&gt; &lt;p&gt;これ。&lt;/p&gt; &lt;p&gt;表示するのはとても簡単。&lt;/p&gt; &lt;p&gt;たとえば、Toastにエラーメッセージを表示したい、とする。エラーの内容はエラーコードをIDに割り付けておいて、IDを渡すだけで表示できるように、メソッド化しておけば便利だよね。そんなメソッドを書いた時、&lt;/p&gt; &lt;p&gt;Javaだと&lt;/p&gt; &lt;div class="insertcode"&gt;&lt;pre&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt; displayError(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; errorId) {
    Toast.makeText(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;, errorId, Toast.LENGTH_LONG).show();
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;C#だと、&lt;/p&gt;
&lt;div class="insertcode"&gt;&lt;pre&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt; displayError(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; errorId) {
    Toast.makeText(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;, errorId, ToastLength.Long).show();
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;F#だと、&lt;/p&gt;
&lt;div class="insertcode"&gt;&lt;pre&gt;member &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.DisplayError(id:&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;) = 
    Toast.MakeText(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;, id, ToastLength.Long).Show()&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;font color="#9b00d3"&gt;&lt;strong&gt;やってることは同じなのに、言語の違いで微妙な違いがあるのが面白いｗ&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;こういうのを楽しめるのがプログラミングの楽しい所の一つだと思ってるの。&lt;/p&gt;
&lt;p&gt;JavaからC#への移植は簡単だけど、JavaからF#への移植は意外と手間かかるってのが、この１メソッドの比較からでも判る。&lt;/p&gt;
&lt;p&gt;でも、間にC#を挟んで移植すると、もうちょっと楽になりそうな気がするね。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/392692.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>F#で簡単な配列を遊んでみる。</title><link>http://blogs.wankuma.com/esten/archive/2014/08/12/387213.aspx</link><pubDate>Tue, 12 Aug 2014 12:23:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2014/08/12/387213.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/387213.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2014/08/12/387213.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/387213.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/387213.aspx</trackback:ping><description>&lt;p&gt;とりあえず、型関連を遊んだら次は配列、というのが個人的にはお約束。&lt;/p&gt; &lt;p&gt;JavaやGroovyのListオブジェクト、Collectionオブジェクトと似たような感触でいじれるようなので、経験済だと困らないｗ&lt;/p&gt; &lt;div class="insertcode"&gt;&lt;pre&gt;[&amp;lt;EntryPoint&amp;gt;]
let main argv = 
    &lt;span style="color: #008000"&gt;// 1 - 100 step 1&lt;/span&gt;
    let baseList1 = [1 .. 100]
    &lt;span style="color: #008000"&gt;// 1 - 100 step 10&lt;/span&gt;
    let baseList2 = [10 .. 10 .. 100]

    printfn "&lt;span style="color: #8b0000"&gt;testing List = %A&lt;/span&gt;" baseList1
    printfn "&lt;span style="color: #8b0000"&gt;--&lt;/span&gt;"
    printfn "&lt;span style="color: #8b0000"&gt;List.Head = %d&lt;/span&gt;" baseList1.Head
    printfn "&lt;span style="color: #8b0000"&gt;List.reverse = %A&lt;/span&gt;" (List.rev baseList1)

    printfn "&lt;span style="color: #8b0000"&gt;partition mod 10&lt;/span&gt;"
    let filter x = ((x % 10) = 0) 
    let ansList1, ansList2 = List.partition filter baseList1

    printfn "&lt;span style="color: #8b0000"&gt;answer-1 = %A&lt;/span&gt;" ansList1
    printfn "&lt;span style="color: #8b0000"&gt;answer-1.length = %d&lt;/span&gt;" ansList1.Length

    printfn "&lt;span style="color: #8b0000"&gt;answer-2.length = %d&lt;/span&gt;" ansList2.Length

    printfn "&lt;span style="color: #8b0000"&gt;compare List = %A&lt;/span&gt;" baseList2
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (baseList2.Head = ansList1.Head) then printfn "&lt;span style="color: #8b0000"&gt;Head is same!&lt;/span&gt;"
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (baseList2.Tail = ansList1.Tail) then printfn "&lt;span style="color: #8b0000"&gt;Tail is same!&lt;/span&gt;"

    0 &lt;span style="color: #008000"&gt;// return an integer exit code&lt;/span&gt;


&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;1刻みとか10刻みの整数リストが作れるとか面白いね。そしてpartition関数((a ?&amp;gt; bool))?&amp;gt; list ?&amp;gt; (list * list))が気に入ったｗ　フィルター条件を関数に書いて、リストに通してあげるだけで、条件合致のリストを作り出せるとか、楽しすぎる。&lt;/p&gt;
&lt;p&gt;実行結果を見てみると、&lt;/p&gt;
&lt;p&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://esten.dip.jp/blogimg/F_BF02/image.png" width="412" height="335"&gt;&lt;/p&gt;
&lt;p&gt;こんな感じ。リストオブジェクトのComparate も書けるらしいので、色々と面白いことが出来そうだね。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/387213.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>ああ、そうか、F#は、.NetFramworkのライブラリも使えるんだっけ。</title><link>http://blogs.wankuma.com/esten/archive/2014/08/11/384655.aspx</link><pubDate>Mon, 11 Aug 2014 16:03:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2014/08/11/384655.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/384655.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2014/08/11/384655.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/384655.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/384655.aspx</trackback:ping><description>&lt;p&gt;F# でリスト要素の追加と削除は、イテレータや演算子を使って、ちょっと自分でアルゴリズムを書く必要があるみたい。&lt;/p&gt; &lt;p&gt;ここでカリー化とか再帰とかなんだかんだと数学をほとんどやってない人にとってはとっても難しい用語や考え方が出てくるわけなんだけれども。&lt;/p&gt; &lt;p&gt;確かに、細かい条件を指定して、便利に確実に高速に処理できる方法があり、それを実践していくのはとても良いこと。でも、分析分解してコードに変換していくにあたって、対象が極めて単純な処理の時には、逆にメンドクサくなっちゃう。&lt;/p&gt; &lt;p&gt;結局、わがままなんだけどねｗ&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;で、やった解決策。&lt;/p&gt; &lt;p&gt;System.Collections.Generic.List&amp;lt;T&amp;gt; &lt;p&gt;を使ってリストオブジェクトを作成して、そのメソッドを使ってやってしまえ、という……。 &lt;p&gt;Xamarin使ってると、.NetFrameworkの存在を忘れてしまうよねｗ　実は使えるのにね、使ってるのにね。 &lt;p&gt;サンプルはC#やVBしかないかもしれないけど、型が違うわけではないので、そこは素直に使えばOK。 &lt;p&gt;そしてLinqでさくっと検索や取得。F# 本来の良さはかなり失われているような気がせでもない。＜を &lt;p&gt;そういえばLinqの正体ってイテレータとか、えーなむあぶる、とか、なんかそんな話を昔していたようなｗ &lt;p&gt;ふむ、何もかも懐かしいｗ&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/384655.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>F#は矢印も大事。関数定義で出てきた-&amp;gt;から色々と考えてみた</title><link>http://blogs.wankuma.com/esten/archive/2014/08/08/373344.aspx</link><pubDate>Fri, 08 Aug 2014 12:54:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2014/08/08/373344.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/373344.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2014/08/08/373344.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/373344.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/373344.aspx</trackback:ping><description>&lt;p&gt;&lt;font color="#0000ff"&gt;F#のmain関数はint型をリターンするというのが決まりらしい。&lt;/font&gt;ということが判ったお話。&lt;/p&gt; &lt;p&gt;きっかけは、とあるエラー表示。にしても&lt;font color="#ff0000"&gt;&lt;strong&gt;XamarinStudioさんのエラー表示、真っ赤でインパクト強くてものすごく悪いことした気持ちになる&lt;/strong&gt;&lt;/font&gt;。&lt;/p&gt; &lt;p&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://esten.dip.jp/blogimg/F_E30B/image.png" width="485" height="128"&gt;&lt;/p&gt; &lt;p&gt;-&amp;gt; って演算子が出てきた。ああ、こいつ、ポインタが指し示すアドレス空間に存在する変数を参照する時や変更する時に使ってたやつだ。想い出したよ、なつかしー。と、最初見て思ったの。&lt;/p&gt; &lt;p&gt;-&amp;gt;演算子が出てきたので、その演算子について書かれている章を読んで、クルミ脳で考えてみた結果、&lt;font color="#9b00d3"&gt;&lt;strong&gt;この型で定義されたアドレス空間があるから、そこへ値を入れてください、そこから値を参照してください、的な動きをしてもらうための命令演算子っぽい&lt;/strong&gt;&lt;/font&gt;と理解。新しめの言語だけど、引き継ぐ所は引き継いでるというか、Cやってたら、ああ、あいつだな、と理解してさくさく進めるという所にちょっと親切さというか懐かしさというか、そんな不思議な気持ちがした。&lt;/p&gt; &lt;p&gt;離し戻して、それを前提として関数の使い方のお作法というか順番をまとめてみると&lt;/p&gt; &lt;ul&gt; &lt;li&gt;関数名と型を決める  &lt;li&gt;関数の振る舞いを決める 。  &lt;ul&gt; &lt;li&gt;この時、関数内の最後の実行命令結果がその関数の実行時の戻り値と型になる。&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;決めておいた関数の振る舞いに、決めておいた型と決めておいた変数名で確保している参照値を送り込む  &lt;li&gt;関数の戻り値を矢印先の型で決めておいた変数（main関数の場合にはプログラム実行結果）として確保しているアドレスへ格納する&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;と片桐的に解釈。&lt;/p&gt; &lt;p&gt;その観点で&lt;font color="#ff0000"&gt;main関数(a ?&amp;gt; int)を読み直してみると、最終行の実行命令が必ずintを返すようにしてください、というエラー命令が出るのは当然だわな&lt;/font&gt;。printfnは ?&amp;gt;unit 関数だって、昨日覚えたばかりだもの。&lt;/p&gt; &lt;p&gt;というわけで、修正。最後の命令は数字のゼロを呼び出すだけの簡単なお仕事。&lt;/p&gt; &lt;div class="insertcode"&gt;&lt;pre class="brush: fsharp; ruler: true; gutter: false; toolbar: false; smart-tabs: false;"&gt;open System

[&amp;lt;entrypoint&amp;gt;]
let main argv = 
    let mult x y = x * y
    let result = mult 3 5
    printfn "%d" result
    0
//----------
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;で、ビルドが通ったので実行してみると、&lt;/p&gt;
&lt;p&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://esten.dip.jp/blogimg/F_E30B/image_3.png" width="451" height="159"&gt;&lt;/p&gt;
&lt;p&gt;OKOK。&lt;/p&gt;
&lt;p&gt;なんだか、ちょっと賢くなった気分だぞｖ&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/373344.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>F#のサンプルをいじって、慣れてみることにした。</title><link>http://blogs.wankuma.com/esten/archive/2014/08/07/369081.aspx</link><pubDate>Thu, 07 Aug 2014 16:02:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2014/08/07/369081.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/369081.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2014/08/07/369081.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/369081.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/369081.aspx</trackback:ping><description>&lt;p&gt;F#ってなんだかちょっとGroovyっぽいｗ&lt;/p&gt; &lt;p&gt;でも時々、聞きなれない予約語が出てくるので、慣れてみようと思うシリーズ（なのか？）&lt;/p&gt; &lt;p&gt;Unitってなんぞ？&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;"The unit type is a value signifying nothing of consequence and is represented in code"&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;って書いてある。片桐的超意訳だと&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Unitタイプはコードで表現されている、結果が何の意味を持たない型だよん&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;って感じに理解した。ふむ、CやJavaでいうvoid型みたいなもんかｗ&lt;/p&gt; &lt;p&gt;printf系メソッドとか典型だよね。それじゃ、それを使ってそうなサンプルを拾ってみよう、ってことでググって、こんな良い所発見♪&lt;/p&gt;&lt;a href="http://fsharp3sample.codeplex.com/"&gt;F# 3.0 Sample Pack - Home&lt;br&gt;http://fsharp3sample.codeplex.com/&lt;/a&gt;&lt;br&gt; &lt;p&gt;ひさしぶりのMicrosoft＆Codeplex関連のサイトめぐりなので、迷子になりつつも見つけたよ。&lt;/p&gt; &lt;p&gt;ここと本があれば、手慣れるところまでは頑張れそうだ。&lt;/p&gt; &lt;p&gt;とりあえず、ちょこっとDosプロンプトアプリを書いてみる。&lt;/p&gt; &lt;div class="insertcode"&gt;&lt;pre&gt;open System

[&amp;lt;EntryPoint&amp;gt;]
let main argv = 

    let &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; = 42
    let &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; = "&lt;span style="color: #8b0000"&gt;This is a string&lt;/span&gt;"
    let &lt;span style="color: #0000ff"&gt;char&lt;/span&gt; = 'c'
    let &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;
    let &lt;span style="color: #0000ff"&gt;bytearray&lt;/span&gt; = "&lt;span style="color: #8b0000"&gt;This is a byte string&lt;/span&gt;"B

    printfn "&lt;span style="color: #8b0000"&gt;int = %d or %A&lt;/span&gt;" &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt;
    printfn "&lt;span style="color: #8b0000"&gt;string = %s or %A&lt;/span&gt;" &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;
    printfn "&lt;span style="color: #8b0000"&gt;char = %c or %A&lt;/span&gt;" &lt;span style="color: #0000ff"&gt;char&lt;/span&gt; &lt;span style="color: #0000ff"&gt;char&lt;/span&gt;
    printfn "&lt;span style="color: #8b0000"&gt;bool = %b or %A&lt;/span&gt;" &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt;
    printfn "&lt;span style="color: #8b0000"&gt;bytearray = %A&lt;/span&gt;" bytearray

    let timeOfDay = DateTime.Now.ToString("&lt;span style="color: #8b0000"&gt;hh:mm tt&lt;/span&gt;")
    printfn "&lt;span style="color: #8b0000"&gt;%A - %A&lt;/span&gt;" argv timeOfDay
    0 &lt;span style="color: #008000"&gt;// return an integer exit code&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;んでもって、これをXamarinで実行。&lt;/p&gt;
&lt;p&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://esten.dip.jp/blogimg/FUnit_9B67/image.png" width="349" height="98"&gt;&lt;/p&gt;
&lt;p&gt;このカスタムパラメータっていうのを使って、&lt;/p&gt;
&lt;p&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://esten.dip.jp/blogimg/FUnit_9B67/image_3.png" width="355" height="253"&gt;&lt;/p&gt;
&lt;p&gt;パラメータ渡して、Executeをクリックすると&lt;/p&gt;
&lt;p&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://esten.dip.jp/blogimg/FUnit_9B67/image_4.png" width="559" height="243"&gt;&lt;/p&gt;
&lt;p&gt;うん、動いたね。&lt;/p&gt;
&lt;p&gt;本を読みつつ、サンプル見つつ、実行しつつ、慣れていこうｗ&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/369081.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>どうせやるなら、F#でやってみても良いよね？</title><link>http://blogs.wankuma.com/esten/archive/2014/08/06/367802.aspx</link><pubDate>Wed, 06 Aug 2014 10:51:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2014/08/06/367802.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/367802.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2014/08/06/367802.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/367802.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/367802.aspx</trackback:ping><description>&lt;p&gt;Xamarinで作ることのできるアプリケーションは、New Solutionすると一目瞭然。&lt;/p&gt; &lt;p&gt;&lt;img title="2014080501" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="2014080501" src="http://esten.dip.jp/blogimg/F_C620/2014080501.jpg" width="475" height="282"&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000" size="7"&gt;&lt;strong&gt;VB.NetでAndroidプログラミングさせろぉぉぉっ！&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;C#でやれるんなら、もういっちょプリコンパイラ挟むだけなのにorz&lt;/p&gt; &lt;p&gt;やらせてくれても良いじゃないのよぅぅ。&lt;/p&gt; &lt;p&gt;C#も嫌いじゃないが、ここはやっぱ、F#でやってみようというのが私。&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;べ、別に、オライリーの表紙の鳥さんが可愛いからとか、そんな理由ぢゃないからね！&lt;/font&gt;&lt;font color="#0000ff"&gt;冠鶴と金魚と蛇も捨てがたいんだけどさｗ&lt;/font&gt;＜を&lt;/p&gt; &lt;p&gt;&lt;img title="2014080502" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="2014080502" src="http://esten.dip.jp/blogimg/F_C620/2014080502.jpg" width="272" height="359"&gt;&lt;/p&gt; &lt;p&gt;オライリーさんとこでオンライン書籍DLで買うと、安いのな。サンプルコードの解説やなんや、オライリーさんところの英語は読みやすいのでしんどくないし、わざわざ日本語版探すより、原書をオンラインDLで買う方がずっと安い。会員コード持ってクーポンコード使うとさらに安い時あるし、対応言語やプラットホームも種類多いし、&lt;strong&gt;何より、表紙の動物が可愛い&lt;/strong&gt;＜一番大事な所&lt;/p&gt; &lt;p&gt;というわけで、早速ソリューションを新規作成。&lt;/p&gt; &lt;p&gt;作るアプリは、Java＋AndroidStudioで作ったものと同じものを再作成、ということでｗ&lt;/p&gt; &lt;p&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://esten.dip.jp/blogimg/F_C620/image.png" width="537" height="322"&gt;&lt;/p&gt; &lt;p&gt;ほー。&lt;font color="#9b00d3"&gt;ファイル配置お作法はテンプレだし、だいたいのやディレクトリ構成も一緒&lt;/font&gt;だね。これはステキ。すぐに取り掛かれそうだ。&lt;/p&gt; &lt;p&gt;ちょっと寄り道して、参照ライブラリとかみてみようかな。&lt;/p&gt; &lt;p&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://esten.dip.jp/blogimg/F_C620/image_3.png" width="454" height="380"&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;Linq発見！&lt;/font&gt;Jsonもいるね。というか、そうか、NUnit　になるんだよな、テストエンジン。&lt;/p&gt; &lt;p&gt;Linqに久々に触れるとか、.Netよ、私は帰ってきた！みたいな気持ちになるね、しみじみするｗ&lt;/p&gt; &lt;p&gt;さて、サイトのサンプルはC#なんだけど、そこはF#に読み替えつつ、このページをじっくり読んでから手をつけようと思うの。&lt;/p&gt;&lt;a href="http://developer.xamarin.com/guides/android/getting_started/"&gt;Getting Started | Xamarin&lt;br&gt;http://developer.xamarin.com/guides/android/getting_started/&lt;/a&gt;&lt;br&gt; &lt;p&gt;Androidアプリのキモとお作法についても記載があるので、おさらいしつつ、進めよう。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/367802.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>