<?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; Gauche</title>
	<atom:link href="http://wordprogress.org/archives/tag/gauche/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から見たGauche その1　FizzBuzz</title>
		<link>http://wordprogress.org/archives/208</link>
		<comments>http://wordprogress.org/archives/208#comments</comments>
		<pubDate>Thu, 05 Nov 2009 04:53:38 +0000</pubDate>
		<dc:creator>kyon</dc:creator>
				<category><![CDATA[Scala]]></category>
		<category><![CDATA[Gauche]]></category>

		<guid isPermaLink="false">http://wordprogress.org/?p=208</guid>
		<description><![CDATA[
		<script type="text/javascript"><!--
			show_rakuten('#auc-treasuremarket10003728', 'NotFound');
		// -->
		</script>
		いいぞ、いいぞ、速いぞGauche♪・・・JVMや.NETのREPL(対話型環境)は、たしかに立ち上がりがどっこらセックス・・・(しつこく小飼弾言を引用)
Lispを取り上げるなら、LispなりのFizzBuzzを取り上げておいたほうが良いだろう。IronSchemeで行こうと思ったが、実行環境のことなどわからなすぎなので、Gaucheに寄り道。

WIndows環境のGaucheは実験中、らしいですが、こういうお遊びではさくっと動いてくれてます。
upzip後の起動とライブラリ(sfri)のインポートまで :

PS C:\Gauche\bin&#62; .\gosh.exe
gosh&#62; (use srfi-1)
#
◇GaucheでFizzBuzz

「Lisp脳」の謎に迫るをほぼそのまま引用させていただく ※FizzBuzz自体が初めての人はリンク先の「Lisp脳」から学んでほしい。
condの中の条件は、[・・・]で囲むのが好みなので こんなかんじ:

gosh&#62; (print
      (map
         (lambda (x) (
            cond
            [(= (modulo x 15) 0) "FizzBuzz"]
 [...]]]></description>
			<content:encoded><![CDATA[
		<script type="text/javascript"><!--
			show_rakuten('#auc-treasuremarket10003728', 'NotFound');
		// -->
		</script>
		<p>いいぞ、いいぞ、速いぞGauche♪・・・JVMや.NETのREPL(対話型環境)は、たしかに立ち上がりがどっこらセックス・・・(しつこく<a href="http://blog.livedoor.jp/dankogai/archives/51275491.html">小飼弾言</a>を引用)</p>
<p>Lispを取り上げるなら、LispなりのFizzBuzzを取り上げておいたほうが良いだろう。IronSchemeで行こうと思ったが、実行環境のことなどわからなすぎなので、Gaucheに寄り道。</p>
<ul>
<li><a href="http://practical-scheme.net/gauche/download-j.html">WIndows環境のGaucheは実験中</a>、らしいですが、こういうお遊びではさくっと動いてくれてます。</li>
<li>upzip後の起動とライブラリ(sfri)のインポートまで :</li>
</ul>
<pre style="margin-left: 1em; margin-right: 1em; background-color: #f8f8f8; white-space: pre-wrap; word-wrap: break-word; padding: 1ex; border: 1px solid #707b8d;">PS C:\Gauche\bin&gt; .\gosh.exe
gosh&gt; (use srfi-1)
#</pre>
<h2>◇GaucheでFizzBuzz</h2>
<ul>
<li><a href="http://karetta.jp/book-node/gauche-hacks/023107 ">「Lisp脳」の謎に迫る</a>をほぼそのまま引用させていただく<em> ※FizzBuzz自体が初めての人はリンク先の「Lisp脳」から学んでほしい。</em></li>
<li>condの中の条件は、[・・・]で囲むのが好みなので こんなかんじ:</li>
</ul>
<pre style="margin-left: 1em; margin-right: 1em; background-color: #f8f8f8; white-space: pre-wrap; word-wrap: break-word; padding: 1ex; border: 1px solid #707b8d;">gosh&gt; (print
      (map
         (lambda (x) (
            cond
            [(= (modulo x 15) 0) "FizzBuzz"]
            [(= (modulo x 5) 0) "Buzz"]
            [(= (modulo x 3) 0) "Fizz"]
                          [else x]
         ))
         (iota 100 1)
      )
)
(1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuz
z 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz 41 Fizz 43 44 FizzBuzz 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58 59 F
izzBuzz 61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 FizzBuzz 76 77 Fizz 79 Buzz Fizz 82 83 Fizz Buzz 86 Fizz 8
8 89 FizzBuzz 91 92 Fizz 94 Buzz Fizz 97 98 Fizz Buzz)
#</pre>
<h2>◇ScalaでFizzBuzz</h2>
<ul>
<li>自分がFizzBuzzするなら、Gauche版に近い書き方をするな。mapを使う高階操作というわけで :</li>
</ul>
<pre class="brush:scala">val FizzBuzz =
	(1 to 100) map { n =&gt; n match
		{
	      case _ if (n%15 == 0) =&gt; "FizzBuzz "
	      case _ if (n%3 == 0) =&gt;"Fizz "
	      case _ if (n%5 == 0) =&gt; "Buzz "
	      case _ =&gt;  (n.toString + " ")
		}
	}</pre>
<p>そして、printする時に形を整える</p>
<pre style="margin-left: 1em; margin-right: 1em; background-color: #f8f8f8; white-space: pre-wrap; word-wrap: break-word; padding: 1ex; border: 1px solid #707b8d;">scala&gt; println (FizzBuzz.mkString)
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz
 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz 41 Fizz 43 44 FizzBuzz 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58 59 Fi
zzBuzz 61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 FizzBuzz 76 77 Fizz 79 Buzz Fizz 82 83 Fizz Buzz 86 Fizz 88
 89 FizzBuzz 91 92 Fizz 94 Buzz Fizz 97 98 Fizz Buzz</pre>
<p>ん～、LispいらずなScala。。ScalaでFizzBuzzはいろいろな人がトライしている。再帰を使ったり、はたまたextractorを使ったり :</p>
<ul>
<li>http://d.hatena.ne.jp/ryugate/20080112/p1</li>
<li>http://pascalmk.clipp.in/entry/42264</li>
</ul>
<p>同じLispでも、無駄にカッコつけない<span style="text-decoration: line-through;">長門有希</span>Clojureは一味違う。・・・と書きかけたのだけれど、みずぴー氏が、<a href="http://d.hatena.ne.jp/mzp/20090716/cond">ClojureのcondをSchemeでも使えるようにしてくれている</a>!・・・Lispビギナーなので、どの程度括弧つけるべきなのか、実のとこ、見当がついてないんだけれども。</p>
<p><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; line-height: 11px; font-size: 11px; color: #333333;"><em><div id="auc-treasuremarket10003728" class="rakuten_details">Now Loading...</div></em></span></p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 1003px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">みずぴー氏が、ClojureのcondをSchemeでも使えるようにしてくれている!</div>
]]></content:encoded>
			<wfw:commentRss>http://wordprogress.org/archives/208/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Scalaから見たIronScheme　その1 やっぱりリスト操作から</title>
		<link>http://wordprogress.org/archives/197</link>
		<comments>http://wordprogress.org/archives/197#comments</comments>
		<pubDate>Wed, 04 Nov 2009 21:51:02 +0000</pubDate>
		<dc:creator>kyon</dc:creator>
				<category><![CDATA[Scala]]></category>
		<category><![CDATA[Gauche]]></category>
		<category><![CDATA[IronScheme]]></category>

		<guid isPermaLink="false">http://wordprogress.org/?p=197</guid>
		<description><![CDATA[.NET上のLisp実装であるIronScheme。なぜ、.NET上で実装したのか気になるところではあるが、目の前にあるバーゲン品で購入したvistaならば、インストール後、C:\Program Files\IronScheme\IronScheme.Console.exeをクリックすると即実行できるので、とりあえず、試して見る。
◇IronScheme
ちょっと手抜きで実行した画面をそのままキャプチャ


(count &#8216;(1 2 3))がエラー　・・　Clojureとは違い、長さを測るのはlengthなのね。
shiroさんの『プログラミングGauche』(O&#8217; REILLY))の46頁にあるfoldは実行できない　・・　S式の基本に戻って(+ x y)を積み重ねる。

◇Scala
Gaucheのfoldに相当するのは、foldLeft とか。例えば、こんな感じ :
scala&#62; (List(2,3,4) foldLeft 1) {(x,y) =&#62; x+y}
res3: Int = 10

scala&#62; (List(2,3,4).foldLeft (1)) {(x,y) =&#62; x+y}
res4: Int = 10

scala&#62;(List(2,3,4) foldLeft 1) {_+_}
res5: Int = 10
左から順に加えていくfoldLeft、ふだんあまり使ってないが、自分が書くならば3番目の書き方かな。
ちなみに、foldLeft相当の記号として:/がある。はじめて見た時には違和感があったけど、左から順にぱたぱた倒れていく、とかイメージすれば、まぁ覚えられるかな。
(1 /: List(2,3,4))(_+_)
(1 /: (2 :: 3 :: 4 :: Nil))(_+_)
/:


◇再びIronScheme
・・・でも、Gaucheのfoldの方がシンプルだなぁ。
IronSchemeでも、Scheme実装であるGaucheのfoldのコードが動くので、以下のように自前でfoldを定義すれば、IronSchemeでもfoldできる。

・・・しかし、IronScheme.Console.exeは使い勝手が微妙。すでに、IronSchemeはIronSchemeで、独自のエコシステムを作りつつあるのだろうが、それを覚える気になるか、自分??
]]></description>
			<content:encoded><![CDATA[<p>.NET上のLisp実装であるIronScheme。なぜ、.NET上で実装したのか気になるところではあるが、目の前にあるバーゲン品で購入したvistaならば、インストール後、C:\Program Files\IronScheme\IronScheme.Console.exeをクリックすると即実行できるので、とりあえず、試して見る。</p>
<h3 style="font-size: 1.17em;">◇IronScheme</h3>
<h3><span style="font-weight: normal; font-size: 13px;">ちょっと手抜きで実行した画面をそのままキャプチャ</span></h3>
<p><img class="alignnone size-full wp-image-198" title="ironscheme" src="http://wordprogress.org/wp2045/wp-content/uploads/2009/11/ironscheme.jpg" alt="ironscheme" width="810" height="482" /></p>
<ul>
<li>(count &#8216;(1 2 3))がエラー　・・　Clojureとは違い、長さを測るのはlengthなのね。</li>
<li>shiroさんの『プログラミングGauche』(O&#8217; REILLY))の46頁にあるfoldは実行できない　・・　S式の基本に戻って(+ x y)を積み重ねる。</li>
</ul>
<h3>◇Scala</h3>
<p>Gaucheのfoldに相当するのは、foldLeft とか。例えば、こんな感じ :</p>
<pre style="margin-left: 1em; margin-right: 1em; background-color: #f8f8f8; white-space: pre-wrap; word-wrap: break-word; padding: 1ex; border: 1px solid #707b8d;">scala&gt; (List(2,3,4) foldLeft 1) {(x,y) =&gt; x+y}
res3: Int = 10

scala&gt; (List(2,3,4).foldLeft (1)) {(x,y) =&gt; x+y}
res4: Int = 10

scala&gt;(List(2,3,4) <span style="color: #800000;">foldLeft</span> 1) {_+_}
res5: Int = 10</pre>
<p>左から順に加えていくfoldLeft、ふだんあまり使ってないが、自分が書くならば3番目の書き方かな。<br />
ちなみに、foldLeft相当の記号として<span style="color: #800000;"><strong>:/</strong></span>がある。はじめて見た時には違和感があったけど、<em><span style="color: #800000;">左から順にぱたぱた倒れていく</span></em>、とかイメージすれば、まぁ覚えられるかな。</p>
<pre style="margin-left: 1em; margin-right: 1em; background-color: #f8f8f8; white-space: pre-wrap; word-wrap: break-word; padding: 1ex; border: 1px solid #707b8d;">(1 <span style="color: #800000;"><strong>/:</strong></span> List(2,3,4))(_+_)
(1 <span style="color: #800000;"><strong><span style="color: #800000;">/:</span></strong></span> (2 :: 3 :: 4 :: Nil))(_+_)</pre>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 73px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><strong>/:</strong></div>
<p><br/><br />
<hr/>
<h3 style="font-size: 1.17em;">◇再びIronScheme</h3>
<p>・・・でも、Gaucheのfoldの方がシンプルだなぁ。<br />
IronSchemeでも、Scheme実装であるGaucheのfoldのコードが動くので、以下のように自前でfoldを定義すれば、IronSchemeでもfoldできる。<br />
<img class="alignnone size-full wp-image-203" title="fold on IronScheme" src="http://wordprogress.org/wp2045/wp-content/uploads/2009/11/fold-on-IronScheme.jpg" alt="fold on IronScheme" width="487" height="167" /><br />
・・・しかし、IronScheme.Console.exeは使い勝手が微妙。すでに、IronSchemeはIronSchemeで、独自のエコシステムを作りつつあるのだろうが、それを覚える気になるか、自分??</p>
]]></content:encoded>
			<wfw:commentRss>http://wordprogress.org/archives/197/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
