<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Go towards a Word-Progress &#187; F#</title>
	<atom:link href="http://wordprogress.org/archives/tag/f/feed" rel="self" type="application/rss+xml" />
	<link>http://wordprogress.org</link>
	<description>　～言霊とプログラム言語の共進化!?</description>
	<lastBuildDate>Fri, 22 Jan 2010 03:37:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>Scalaから見たF#　その2:オブジェクト指向、命令型プログラミング</title>
		<link>http://wordprogress.org/archives/175</link>
		<comments>http://wordprogress.org/archives/175#comments</comments>
		<pubDate>Wed, 04 Nov 2009 15:33:46 +0000</pubDate>
		<dc:creator>kyon</dc:creator>
				<category><![CDATA[Scala]]></category>
		<category><![CDATA[F#]]></category>

		<guid isPermaLink="false">http://wordprogress.org/?p=175</guid>
		<description><![CDATA[
		<script type="text/javascript"><!--
			show_rakuten('#saikashop10018406', '<!-- cache --><div class="rakuten_image"><a href="http://hb.afl.rakuten.co.jp/hgc/0b16999f.c5b9c54b.0b1699a0.49a76732/?pc=http%3A%2F%2Fitem.rakuten.co.jp%2Fsaikashop%2Ft01388%2F" target="_blank"><img src="http://thumbnail.image.rakuten.co.jp/@0_mall/saikashop/cabinet/img10/t01388.jpg?_ex=128x128"><br /><p class="rakuten_logo"><!-- Rakuten Web Services Attribution Snippet FROM HERE --><a href="http://webservice.rakuten.co.jp/" target="_blank"><img src="http://webservice.rakuten.co.jp/img/credit/200709/credit_4936.gif" border="0" alt="楽天ウェブサービスセンター" title="楽天ウェブサービスセンター" width="49" height="36"/></a><!-- Rakuten Web Services Attribution Snippet TO HERE --></p><font class="rakuten_warn"><a href="#" class="tooltip">[ご利用にあたって]<span>このサイトで掲載されている情報は、「Go towards a Word-Progress」の作成者により運営されています。価格、販売可能情報は、変更される場合があります。購入時に楽天市場店舗（www.rakuten.co.jp）に表示されている価格が、その商品の販売に適用されます。</span></a></font></div><div class="rakuten_info"><p class="rakuten_itemname"><a href="http://hb.afl.rakuten.co.jp/hgc/0b16999f.c5b9c54b.0b1699a0.49a76732/?pc=http%3A%2F%2Fitem.rakuten.co.jp%2Fsaikashop%2Ft01388%2F" target="_blank">伝説のスポ根野球漫画「巨人の星」星飛雄馬コスチューム★なりきり巨人の星ご注文後1週間前後で出荷となります</a></p><p class="rakuten_caption">「父ちゃん、俺やるよ！」全ては大リーグ養成ギプスから始まった・・・。伝説のスポ根野球漫画「巨人の星」、星飛雄馬コスチューム★燃える闘魂マスク、ひっくり返し用ちゃぶ台付き！！サイズ適応サイズ：175cm、70kg位まで素材・材質帽子：ポリエステル、マスク：ポリウレタン、スーツ：ポリエステル、コイル（ギプス）：pp、ちゃぶ台：pvc仕様正規版権許諾商品（c）（c）梶原一騎・川崎のぼる/講談社セット内容帽子、マスク×2（飛雄馬/一徹）、スーツ、コイル（ギプス）、ちゃぶ台製造国中国伝説のスポ根野球漫画「巨人の星」……</p><p><em>販売価格：</em> 7329 円 <font class="rakuten_time">(10/07/30 20:22 更新)</font></p><p><em>販売店舗：</em> <a href="http://www.rakuten.co.jp/saikashop/" target="_blank">彩華生活</a></p></div><!-- cache -->');
		// -->
		</script>
		
		<script type="text/javascript"><!--
			show_rakuten('#book11607337', '<!-- cache --><div class="rakuten_image"><a href="http://hb.afl.rakuten.co.jp/hgc/0b16999f.c5b9c54b.0b1699a0.49a76732/?pc=http%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F3888640%2F" target="_blank"><img src="http://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/ogs_320212/3202120532.jpg?_ex=128x128"><br /><p class="rakuten_logo"><!-- Rakuten Web Services Attribution Snippet FROM HERE --><a href="http://webservice.rakuten.co.jp/" target="_blank"><img src="http://webservice.rakuten.co.jp/img/credit/200709/credit_4936.gif" border="0" alt="楽天ウェブサービスセンター" title="楽天ウェブサービスセンター" width="49" height="36"/></a><!-- Rakuten Web Services Attribution Snippet TO HERE --></p><font class="rakuten_warn"><a href="#" class="tooltip">[ご利用にあたって]<span>このサイトで掲載されている情報は、「Go towards a Word-Progress」の作成者により運営されています。価格、販売可能情報は、変更される場合があります。購入時に楽天市場店舗（www.rakuten.co.jp）に表示されている価格が、その商品の販売に適用されます。</span></a></font></div><div class="rakuten_info"><p class="rakuten_itemname"><a href="http://hb.afl.rakuten.co.jp/hgc/0b16999f.c5b9c54b.0b1699a0.49a76732/?pc=http%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F3888640%2F" target="_blank">【アニメCD3倍】巨人の星 ミュージックファイル</a></p><p class="rakuten_caption">(アニメーション)このアーティストの新着メールを登録する発売日：2003年01月22日登録情報レーベル：(株)徳間ジャパンコミュニケーションズ発売元：(株)ファースト・ディストリビューションディスク枚数：1枚(CD1枚)総曲数：15(アルバム)収録時間：57分35秒品番：TKCA-72514JAN:4988008707335実はこういうCDを待っていた!　という人は多いんじゃないだろうか。個人的には(3)と、オーロラ3人娘の(14)をフル・コーラス聴くことができただけで大満足。とはいうものの、後者がかなり……</p><p><em>販売価格：</em> 2300 円 <font class="rakuten_time">(10/07/30 20:22 更新)</font></p><p><em>販売店舗：</em> <a href="http://www.rakuten.co.jp/book/" target="_blank">楽天ブックス</a></p></div><!-- cache -->');
		// -->
		</script>
		
		<script type="text/javascript"><!--
			show_rakuten('#hobinavi10029154', 'NotFound');
		// -->
		</script>
		
		<script type="text/javascript"><!--
			show_rakuten('#hobinavi10031336', 'NotFound');
		// -->
		</script>
		
		<script type="text/javascript"><!--
			show_rakuten('#e-medio1421833', 'NotFound');
		// -->
		</script>
		今回は、他の言語から来た人間が、F#に拒絶反応を示す原因となるかもしれない、F#のオブジェクト指向、命令型プログラミングを、例によってScalaから見ていく。
 ※私はF#をやると決めているので、まぁ、こんなものとF#の現実として受け止めている。
勉強させていただくのは、net-kさんのF#入門サイト
命令型プログラミング より、 「whileの例」
◇F#
let counter = ref 5

while !counter &#62; 0 do
    printfn "counter=%d" !counter
    counter := !counter-1
◇Scala
var counter = 5
while (counter &#62; 0) {
    println ("counter=%d".format(counter))
    counter -= 1
}

F#では、mutableな変数を扱うためには、ref(参照）の理解が欠かせない　(!や:=が気になる人も多いだろう)。Immutableなプログラミングを推進すべく、mutableな記述に抵抗感を抱くよう、あえて導入された構文・・なのかな(いわば、「大リーグ養成ギブス」)??
val =&#62; immutable, var =&#62; mutableというシンプルなルールのScalaでは、手続き型(命令型)のプログラムをJavaっぽく普通に書ける

&#8212;[Scalaでの実行結果]&#8212;
scala&#62; var counter = 5
counter: Int = 5
scala&#62; while [...]]]></description>
			<content:encoded><![CDATA[
		<script type="text/javascript"><!--
			show_rakuten('#saikashop10018406', '<!-- cache --><div class="rakuten_image"><a href="http://hb.afl.rakuten.co.jp/hgc/0b16999f.c5b9c54b.0b1699a0.49a76732/?pc=http%3A%2F%2Fitem.rakuten.co.jp%2Fsaikashop%2Ft01388%2F" target="_blank"><img src="http://thumbnail.image.rakuten.co.jp/@0_mall/saikashop/cabinet/img10/t01388.jpg?_ex=128x128"><br /><p class="rakuten_logo"><!-- Rakuten Web Services Attribution Snippet FROM HERE --><a href="http://webservice.rakuten.co.jp/" target="_blank"><img src="http://webservice.rakuten.co.jp/img/credit/200709/credit_4936.gif" border="0" alt="楽天ウェブサービスセンター" title="楽天ウェブサービスセンター" width="49" height="36"/></a><!-- Rakuten Web Services Attribution Snippet TO HERE --></p><font class="rakuten_warn"><a href="#" class="tooltip">[ご利用にあたって]<span>このサイトで掲載されている情報は、「Go towards a Word-Progress」の作成者により運営されています。価格、販売可能情報は、変更される場合があります。購入時に楽天市場店舗（www.rakuten.co.jp）に表示されている価格が、その商品の販売に適用されます。</span></a></font></div><div class="rakuten_info"><p class="rakuten_itemname"><a href="http://hb.afl.rakuten.co.jp/hgc/0b16999f.c5b9c54b.0b1699a0.49a76732/?pc=http%3A%2F%2Fitem.rakuten.co.jp%2Fsaikashop%2Ft01388%2F" target="_blank">伝説のスポ根野球漫画「巨人の星」星飛雄馬コスチューム★なりきり巨人の星ご注文後1週間前後で出荷となります</a></p><p class="rakuten_caption">「父ちゃん、俺やるよ！」全ては大リーグ養成ギプスから始まった・・・。伝説のスポ根野球漫画「巨人の星」、星飛雄馬コスチューム★燃える闘魂マスク、ひっくり返し用ちゃぶ台付き！！サイズ適応サイズ：175cm、70kg位まで素材・材質帽子：ポリエステル、マスク：ポリウレタン、スーツ：ポリエステル、コイル（ギプス）：pp、ちゃぶ台：pvc仕様正規版権許諾商品（c）（c）梶原一騎・川崎のぼる/講談社セット内容帽子、マスク×2（飛雄馬/一徹）、スーツ、コイル（ギプス）、ちゃぶ台製造国中国伝説のスポ根野球漫画「巨人の星」……</p><p><em>販売価格：</em> 7329 円 <font class="rakuten_time">(10/07/30 20:22 更新)</font></p><p><em>販売店舗：</em> <a href="http://www.rakuten.co.jp/saikashop/" target="_blank">彩華生活</a></p></div><!-- cache -->');
		// -->
		</script>
		
		<script type="text/javascript"><!--
			show_rakuten('#book11607337', '<!-- cache --><div class="rakuten_image"><a href="http://hb.afl.rakuten.co.jp/hgc/0b16999f.c5b9c54b.0b1699a0.49a76732/?pc=http%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F3888640%2F" target="_blank"><img src="http://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/ogs_320212/3202120532.jpg?_ex=128x128"><br /><p class="rakuten_logo"><!-- Rakuten Web Services Attribution Snippet FROM HERE --><a href="http://webservice.rakuten.co.jp/" target="_blank"><img src="http://webservice.rakuten.co.jp/img/credit/200709/credit_4936.gif" border="0" alt="楽天ウェブサービスセンター" title="楽天ウェブサービスセンター" width="49" height="36"/></a><!-- Rakuten Web Services Attribution Snippet TO HERE --></p><font class="rakuten_warn"><a href="#" class="tooltip">[ご利用にあたって]<span>このサイトで掲載されている情報は、「Go towards a Word-Progress」の作成者により運営されています。価格、販売可能情報は、変更される場合があります。購入時に楽天市場店舗（www.rakuten.co.jp）に表示されている価格が、その商品の販売に適用されます。</span></a></font></div><div class="rakuten_info"><p class="rakuten_itemname"><a href="http://hb.afl.rakuten.co.jp/hgc/0b16999f.c5b9c54b.0b1699a0.49a76732/?pc=http%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F3888640%2F" target="_blank">【アニメCD3倍】巨人の星 ミュージックファイル</a></p><p class="rakuten_caption">(アニメーション)このアーティストの新着メールを登録する発売日：2003年01月22日登録情報レーベル：(株)徳間ジャパンコミュニケーションズ発売元：(株)ファースト・ディストリビューションディスク枚数：1枚(CD1枚)総曲数：15(アルバム)収録時間：57分35秒品番：TKCA-72514JAN:4988008707335実はこういうCDを待っていた!　という人は多いんじゃないだろうか。個人的には(3)と、オーロラ3人娘の(14)をフル・コーラス聴くことができただけで大満足。とはいうものの、後者がかなり……</p><p><em>販売価格：</em> 2300 円 <font class="rakuten_time">(10/07/30 20:22 更新)</font></p><p><em>販売店舗：</em> <a href="http://www.rakuten.co.jp/book/" target="_blank">楽天ブックス</a></p></div><!-- cache -->');
		// -->
		</script>
		
		<script type="text/javascript"><!--
			show_rakuten('#hobinavi10029154', 'NotFound');
		// -->
		</script>
		
		<script type="text/javascript"><!--
			show_rakuten('#hobinavi10031336', '');
		// -->
		</script>
		
		<script type="text/javascript"><!--
			show_rakuten('#e-medio1421833', 'NotFound');
		// -->
		</script>
		<p>今回は、他の言語から来た人間が、F#に拒絶反応を示す原因となるかもしれない、F#のオブジェクト指向、命令型プログラミングを、例によってScalaから見ていく。<br />
<em> ※私はF#をやると決めているので、まぁ、こんなものとF#の現実として受け止めている。</em></p>
<p>勉強させていただくのは、<a href="http://fsharp.web.fc2.com/#はじめに">net-kさんのF#入門サイト</a></p>
<h3 style="font-size: 1.17em;"><a href="http://fsharp.web.fc2.com/imperative_programming.html">命令型プログラミング</a> より、 「whileの例」</h3>
<h3><strong>◇F#</strong></h3>
<pre class="brush:java">let counter = ref 5

while !counter &gt; 0 do
    printfn "counter=%d" !counter
    counter := !counter-1</pre>
<h4>◇Scala</h4>
<pre class="brush:scala">var counter = 5
while (counter &gt; 0) {
    println ("counter=%d".format(counter))
    counter -= 1
}</pre>
<ul>
<li>F#では、mutableな変数を扱うためには、<span style="color: #800000;"><strong>ref(参照）</strong></span>の理解が欠かせない　(<span style="color: #800000;"><strong>!</strong></span>や<span style="color: #800000;"><strong>:=</strong></span>が気になる人も多いだろう)。Immutableなプログラミングを推進すべく、mutableな記述に抵抗感を抱くよう、あえて導入された構文・・なのかな(いわば、「<a href="http://ja.wikipedia.org/wiki/%E5%B7%A8%E4%BA%BA%E3%81%AE%E6%98%9F">大リーグ養成ギブス</a>」)??</li>
<li>val =&gt; immutable, var =&gt; mutableというシンプルなルールのScalaでは、手続き型(命令型)のプログラムをJavaっぽく普通に書ける</li>
</ul>
<p>&#8212;[Scalaでの実行結果]&#8212;<br />
scala&gt; var counter = 5<br />
counter: Int = 5</p>
<p>scala&gt; while (counter &gt; 0) {<br />
| println (&#8220;counter=%d&#8221;.format(counter))<br />
| counter -= 1<br />
| }<br />
counter=5<br />
counter=4<br />
counter=3<br />
counter=2<br />
counter=1<br />
&#8212;&#8211;</p>
<h3 style="font-size: 1.17em;"><a href="http://fsharp.web.fc2.com/object_oriented_programming.html">オブジェクト指向プログラミング</a> より、 「クラス定義の例」</h3>
<h4><strong>◇F#</strong></h4>
<pre class="brush:java">#light

type Monster(level:int,hp:int) =
    class
        member x.Level = level;
        member x.Hp    = hp;
        member x.ShowStatus = printfn "level=%d, hp=%d" level hp
    end

let x = new Monster( 10, 200 )
x.ShowStatus</pre>
<h4><strong>◇Scala</strong></h4>
<pre class="brush:scala">class Monster (val level:Int,val hp:Int)
{
    def ShowStatus =
        println ("level=%d, hp=%d".format(level,hp))
}
val x = new Monster( 10, 200 )
x.ShowStatus</pre>
<ul>
<li>F#では、type～引数～classでクラス定義をするのか。これはこれで嫌いじゃないぞ。</li>
<li>Scalaでは、何のへんてつもなく、単にclass(引数)でクラス定義を行う</li>
</ul>
<p><span style="color: #888888;">&#8212;[Scalaでの実行結果]&#8212;</span></p>
<p><span style="color: #888888;">scala&gt; class Monster (val level:Int,val hp:Int) {<br />
| def ShowStatus = println (&#8220;level=%d, hp=%d&#8221;.format(level,hp))<br />
| }<br />
defined class Monster</span></p>
<p><span style="color: #888888;">scala&gt; val x = new Monster( 10, 200 )<br />
x: Monster = Monster@3b4f0e</span></p>
<p><span style="color: #888888;">scala&gt; x.ShowStatus<br />
level=10, hp=200</span></p>
<p><span style="color: #888888;">&#8212;&#8212;</span></p>
<p>[追記] 子飼弾氏が言うように、Scalaは「えらい美少女」な言語なのだが、ただの美少女ではない。一癖あるぞ、ということで、上記MonsterクラスをListに入れて再帰的に扱う例をおまけに。</p>
<pre class="brush:scala">type of[m[_],t] = m[t]

def sumOfHitpoint (ListOfMonster : List of Monster)= {
    var total = 0
    def rec(LoM :List of Monster) : List of Monster =
        if (LoM.isEmpty) LoM else {
            total += LoM.head.hp
            rec(LoM.tail)
        }

    rec(ListOfMonster)
    total
}

val m1 = new Monster( 10, 200 )
val m2 = new Monster( 8, 140 )
val m3 = new Monster( 7, 100 )

println {
    "Total Hit Points : %d".format{
        sumOfHitpoint{
            List(m1,m2,m3)
        }
    }
}</pre>
<p>そう,scalaのtypeキーワードは、「型」を操作するためにある。そのうえ、別名(alias)をつけることができるのだ。<br />
静的言語でありつつ型推論の仕組みを持つScalaだが、再帰を記述する際などには「型」の記述を省略できない。その 場合でも、別名を使えるため、DSLを作る場合などに便利というわけ。</p>
<p>なので、ひとたび、<br />
type of[m[_],t] = m[t]<br />
とおまじないをとなえると、以下の2つは同じ意味となる。</p>
<ul>
<li>def a (x: List of Int) : List of (List of Int) = List(x.tail)</li>
<li>def a (x: List[Int]) : List[List[Int]] = List(x.tail)</li>
</ul>
<p>ScalaでDSL、ただいま、絶賛勉強中なのでそのうち何か書くかも。</p>
<h4><span style="text-decoration: underline;"><span style="color: #ff0000;">突然次</span><span style="color: #ff0000;">回予告</span></span><span style="color: #ff0000;"> : </span><span style="text-decoration: line-through;"><span style="color: #ff0000;">涼宮ハルヒ</span></span><span style="color: #ff0000;">Scalaも驚愕!?<br />
「F#スゲーな話」　非同期ワークフロー</span></h4>
<p><span style="color: #ff0000;"><br />
</span></p>
<h3>◇F#の星になるならこれを着ろ!!</h3>
<p><div id="saikashop10018406" class="rakuten_details">Now Loading...</div><br />
<div id="book11607337" class="rakuten_details">Now Loading...</div></p>
<p><div id="hobinavi10029154" class="rakuten_details">Now Loading...</div></p>
<p><div id="hobinavi10031336" class="rakuten_details">Now Loading...</div></p>
<p><div id="e-medio1421833" class="rakuten_details">Now Loading...</div></p>
]]></content:encoded>
			<wfw:commentRss>http://wordprogress.org/archives/175/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scalaから見たF#　その1:入門編</title>
		<link>http://wordprogress.org/archives/145</link>
		<comments>http://wordprogress.org/archives/145#comments</comments>
		<pubDate>Wed, 04 Nov 2009 09:54:07 +0000</pubDate>
		<dc:creator>kyon</dc:creator>
				<category><![CDATA[Scala]]></category>
		<category><![CDATA[F#]]></category>

		<guid isPermaLink="false">http://wordprogress.org/?p=145</guid>
		<description><![CDATA[(JavaEE)などのJVM環境と.NET環境の相互運用というと、JavaとC#というのが定番だが、Scala使い的にはScalaとF#でいってみたいと個人的に思っている。
※F# -&#62; MS流OCaml。
※OCaml使いの人からすると微妙なのだろうが、F#のlight構文はScala使いからするとそんなに悪くない感じ
今回は、Codezineでの星山氏のF#入門記事を勉強させてもらいながら、気になるところをランダムにscala化して比べてみる。
※F#の方の解説は全面的にCodezine記事にゆだねてます。
■Scalaの再帰関数の宣言
def facto(n:Int) : Int =
    if (n &#60;=1 ) 1 else n * facto(n-1)

F#で再帰関数[Codezine]
メモ　F#では再帰関数をlet recで宣言

[実行結果]scala&#62; print(facto(5))
120
■Scalaの高階操作
お題 : 1,2,3という要素からなるリストの各要素を2倍して、一つずつ表示する ※元の例が1行なのでこちらも1行で
   List(1,2,3).map(_*2).foreach(println(_))

F#/C#でリスト[Codezine]
感想　F#よりC#の方が分かりやすいなぁ
メモ　F#のパイプライン記号は、“&#124;&#62;”　　#JavaやScalaの&#8221;.&#8221;に相当（?）

■Scalaのカリー化
: Scalaのカリー化について詳しくは、A Life in 新宿さんの解説を参考にしてほしい
 def testadd (x:Int)(y:Int) = x + y

F#では、let testadd x y = x + y (codezine)　　※Scalaでは括弧が省略できない場合が多いが、F#(OCaml)では多くの場合、省略可能。趣味もあるだろうが、F#の方を好ましく思う人もいることだろう。

scala&#62; def add1 = testadd(1) _
add1: (Int) =&#62; Int
scala&#62; add1(2)
res12: Int [...]]]></description>
			<content:encoded><![CDATA[<p>(JavaEE)などのJVM環境と.NET環境の相互運用というと、JavaとC#というのが定番だが、Scala使い的にはScalaとF#でいってみたいと個人的に思っている。</p>
<p><em>※F# -&gt; MS流OCaml。<br />
※OCaml使いの人からすると微妙なのだろうが、F#のlight構文はScala使いからするとそんなに悪くない感じ</em></p>
<p>今回は、Codezineでの星山氏のF#入門記事を勉強させてもらいながら、気になるところをランダムにscala化して比べてみる。<br />
<em>※F#の方の解説は全面的にCodezine記事にゆだねてます。</em></p>
<h4 style="font-size: 1em;">■Scalaの再帰関数の宣言</h4>
<pre class="brush:scala">def facto(n:Int) : Int =
    if (n &lt;=1 ) 1 else n * facto(n-1)</pre>
<ul>
<li><a href="http://codezine.jp/article/detail/4430">F#で再帰関数[Codezine]</a></li>
<li>メモ　F#では再帰関数を<span style="color: #800000;"><strong>let rec</strong></span>で宣言</li>
</ul>
<p><a href="http://codezine.jp/article/detail/4430">[実行結果]scala&gt; print(facto(5))<br />
120</a></p>
<h4 style="font-size: 1em;">■Scalaの高階操作</h4>
<p>お題 : 1,2,3という要素からなるリストの各要素を2倍して、一つずつ表示する <em>※元の例が1行なのでこちらも1行で</em></p>
<pre class="brush:scala">   List(1,2,3).map(_*2).foreach(println(_))</pre>
<ul><a href="http://codezine.jp/article/detail/4430"></a></p>
<li><a href="http://codezine.jp/article/detail/4430?p=2">F#/C#でリスト[Codezine]</a></li>
<li>感想　F#よりC#の方が分かりやすいなぁ</li>
<li>メモ　F#のパイプライン記号は、“<span style="color: #800000;"><strong>|&gt;</strong></span>”　　#JavaやScalaの&#8221;.&#8221;に相当（?）</li>
</ul>
<h4 style="font-size: 1em;">■Scalaのカリー化</h4>
<p>: Scalaのカリー化について詳しくは、<a href="http://hibituredure.blogspot.com/2008/10/scala.html">A Life in 新宿さんの解説</a>を参考にしてほしい</p>
<pre class="brush:scala"> def testadd (x:Int)(y:Int) = x + y</pre>
<ul>
<li>F#では、<span style="color: #800000;"><strong>let testadd x y = x + y</strong></span> (<a href="http://codezine.jp/article/detail/4430?p=3">codezine</a>)　　<em>※Scalaでは括弧が省略できない場合が多いが、F#(OCaml)では多くの場合、省略可能。趣味もあるだろうが、F#の方を好ましく思う人もいることだろう。</em></li>
</ul>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 513px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">scala&gt; def add1 = testadd(1) _</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 513px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">add1: (Int) =&gt; Int</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 513px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">scala&gt; add1(2)</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 513px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">res12: Int = 3</div>
<p>(カリー化の使用例)<br />
scala&gt; def add1 = testadd(1) _<br />
add1: (Int) =&gt; Int<br />
scala&gt; add1(2)<br />
res12: Int = 3</p>
<h4 style="font-size: 1em;">■中置演算子・・・</h4>
<p>・・・うっ、Scalaでの書き方が分からない。。<br />
F#だと<span style="color: #800000;"><strong>以下</strong></span>のように新たな感じで中置演算子@-@を定義できる。</p>
<pre><span style="color: #800000;"><strong>　　&gt; let ( @-@/ ) a b = a*b*3+125 ;;
　　&gt; 10 @-@/ 4 ;;
　　val it : int = 245</strong></span></pre>
<ul>
<li><strong>Scalaで</strong>こうした中置演算子をさくっと書ける方がいらっしゃったら、教えてもらえるとありがたいです(たぶん、implicit conversionですよね・・)。</li>
</ul>
<p><em>#ちょっとだけ言い訳しておくと、「</em><span style="color: #800000;"><strong><em>@-@</em></strong></span><em>」みたいな記号って、意味を検索したくなったときに困るから、普段、自分で定義しないようにしている(もちろん、便利と思うものは使っているんだけれど)。<br />
#中置演算子というか、記号的な演算子については、即座に読み(別名?)を呼び出せる仕組みが言語に標準であるといいんだけれど、と個人的には思う。</em></p>
<p>最後はしりきれトンボになってしまったが、今回はここまで。F#、なれていないので正直かなり違和感あるんだけれど、嫌いではない。がりがり.NET(CLR)のコードを書く<strong>必要に迫られたら使うかも</strong>。</p>
]]></content:encoded>
			<wfw:commentRss>http://wordprogress.org/archives/145/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
