<?xml version="1.0" encoding="UTF-8" ?>
<rss version='2.0'>
<channel>
<title>BBS</title>
<description>新着投稿一覧</description>
<link>http://fsharp.bbs.fc2.com/</link>
<ttl>60</ttl>
<copyright>FC2, inc</copyright>
<item>
<title>lanvin en bleu women</title>
<author>lanvin en bleu women</author>
<link>http://fsharp.bbs.fc2.com/?act=reply&amp;tid=4727964</link>
<description><![CDATA[lanvin ジャケット]]></description>
<pubDate>Tue, 27 Aug 2013 10:34:08 +0900</pubDate>
</item>
<item>
<title>Re: リストの途中まで処理したい場合</title>
<author>管理人(deko_pon)</author>
<link>http://fsharp.bbs.fc2.com/?act=reply&amp;tid=2512831</link>
<description><![CDATA[&amp;gt;C#でいうところのdefaultキーワード
あっ、C#だって参照型ばかりじゃないですもんね。なるほど。

シーケンスの動作のほうは、何故こうなるかやっと理解出来ました。
自分の作ったほうでは、e.Currentが2回評価されてしまうからですね。
リストを渡した場合は、
リスト-&amp;gt;シーケンスへの変換の段階(がきっとあって)で
副作用が終わるため、同じ結果に見えてしまっていたと。
これは、自分には盲点でした。
副作用のある式の評価って怖いですね・・
]]></description>
<pubDate>Sat, 14 Mar 2009 11:15:32 +0900</pubDate>
</item>
<item>
<title>Re: リストの途中まで処理したい場合</title>
<author>いげ太</author>
<link>http://fsharp.bbs.fc2.com/?act=reply&amp;tid=2512831</link>
<description><![CDATA[&amp;gt; print などの副作用を含むリストを渡した場合
あーっと、すいません。ここはリスト（list）じゃなくてシークエンス（seq）と言わないといけないところでした。

let xs = seq { for n in 0..9 -&amp;gt; printf &amp;quot;%d &amp;quot; n; n };;
take_find ((=) 3) xs;;
// 0 1 2 3 val it : seq&amp;lt;int&amp;gt; = seq [0; 1; 2; 3]
take_find2 ((&amp;lt;&amp;gt;) 3) xs;;
// 0 0 1 1 2 2 3 3 val it : seq&amp;lt;int&amp;gt; = seq [0; 1; 2; 3]


&amp;gt; Unchecked.defaultof
C# でいうところの default キーワードですね。その名の通りですが、型パラメタとして指定された型のゼロ初期化値を返すものですね。

（ご参考）
http://msdn.microsoft.com/ja-jp/library/xwth0h0d(VS.80).aspx
]]></description>
<pubDate>Fri, 13 Mar 2009 10:46:46 +0900</pubDate>
</item>
<item>
<title>Re: リストの途中まで処理したい場合</title>
<author>管理人(deko_pon)</author>
<link>http://fsharp.bbs.fc2.com/?act=reply&amp;tid=2512831</link>
<description><![CDATA[テストしてみましたが、
自分が作ったやつは空リストが返ってくる時はエラーが出てしまいますね

Unchecked.defaultofがわからなかったので調べてみたところ
　・C#の世界では、参照にはnullが代入可
　・F#の世界では、そうなっていない箇所もある(リスト、タプルなど)
　→この違いを吸収するもの
　参考
　http://blogs.msdn.com/dsyme/archive/2008/05/02/full-release-notes-for-f-1-9-4.aspx
自分はこんな所まで考えたことが無かったのですが
それが上記コードの違いになったみたいです。難しい・・

テストケース
(自分が作った方はtake_find2に改名)
take_find ((&amp;lt;&amp;gt;)0) [] |&amp;gt; print_any;;
seq []
take_find2 ((=)0)  [] |&amp;gt; print_any;;
Error: Enumeration already finished.

take_find ((&amp;lt;&amp;gt;)0) [0;0;0] |&amp;gt; print_any;;
seq [0; 0; 0]
take_find2 ((=)0) [0;0;0] |&amp;gt; print_any;;
Error: Enumeration already finis]]></description>
<pubDate>Fri, 13 Mar 2009 00:09:58 +0900</pubDate>
</item>
<item>
<title>Re: リストの途中まで処理したい場合</title>
<author>いげ太</author>
<link>http://fsharp.bbs.fc2.com/?act=reply&amp;tid=2512831</link>
<description><![CDATA[僕の版の take_find と、deko_pon さんの版の take_find とで、以下のケースについてテストしてみるとおもしろいですよ。

-- 空のリストを渡した場合
-- すべてのリスト要素が条件に合致“しない”場合（deko_pon さん版のは条件式が逆になるので、「合致“する”場合」と言うべきかな）
-- print などの副作用を含むリストを渡した場合

僕は Seq.take_while のライブラリ ソースをもとに take_find を作ったのですが、なぜそういうコードになっているのか、このテストを行うことで理解できると思います。]]></description>
<pubDate>Thu, 12 Mar 2009 10:56:53 +0900</pubDate>
</item>
<item>
<title>Re: リストの途中まで処理したい場合</title>
<author>管理人(deko_pon)</author>
<link>http://fsharp.bbs.fc2.com/?act=reply&amp;tid=2512831</link>
<description><![CDATA[例外の箇所へのコメントありがとうございます。
私は正格評価好き派で
ほとんどSeqを使ったことがないので上記コードの理解するのに結構時間かかってしまいました

とりあえず思ったのは
「回数が定まっているループを途中で抜けたい」っていう欲求が
Lazyな世界ではそこまでないというか
勝手に必要なとこだけ計算されるし
「必要なところまでループする」って感じですね。
breakやらを必要としない理由が何となくですが納得出来ました。

whileにyieldが出てくる構文なんて知らないぞ、と思って調べたら
Sequence Expressionっていうやつなんですね、これは知らなかった
　・参考
	http://blogs.msdn.com/dsyme/archive/2007/09/22/some-details-on-f-computation-expressions-aka-monadic-or-workflow-syntax.aspx
そもそもyieldはあまり理解してなかったんですが
これっていわゆるコルーチンですよね。
schemeのambみたいなのも頑張ったら書けるのかな

ところで、このBBSは勝手にソースコードをfold_leftしてしまう&amp;gt;&amp;lt;ので
頂いたコードを少し整理して#light &amp;quot;off&amp;quot;で書き直してみました。
let take_find p (inp: seq&amp;lt;_&amp;gt;) =
    seq {use e = inp.GetEnumerator() in
        while e.MoveNext() &amp;amp;&amp;amp; (p e.Current) do
            yield e.Current;
        done;
        yield e.Current
        } in
[1;2;0;4;5]
|&amp;gt; take_find ((&amp;lt;&amp;gt;)0)
|&amp;gt; print_any;;

最後に、このケースなら、こんな感じでお茶を濁してしまうかも
　let take_till p a lst = Seq.append (Seq.take_w]]></description>
<pubDate>Mon, 09 Mar 2009 23:00:13 +0900</pubDate>
</item>
<item>
<title>リストの途中まで処理したい場合</title>
<author>いげ太</author>
<link>http://fsharp.bbs.fc2.com/?act=reply&amp;tid=2512831</link>
<description><![CDATA[たとえば、要素値が 0 であるところまでのリストがほしいという場合、単に Seq.take_while ((&amp;lt;&amp;gt;) 0) ではダメ（0 が現れる手前までになる）なので、次のような関数を用意するとよいかと。

let take_find p (inp: seq&amp;lt;_&amp;gt;) =
    seq { use e = inp.GetEnumerator()
          let latest = ref (Unchecked.defaultof&amp;lt;_&amp;gt;)
          while e.MoveNext() &amp;amp;&amp;amp; (latest := e.Current; not (p !latest)) do
              yield !latest
          if p !latest then
              yield !latest }

[3..(-1)..(-1000)]
|&amp;gt; take_find ((=) 0)
|]]></description>
<pubDate>Mon, 09 Mar 2009 00:03:20 +0900</pubDate>
</item>
<item>
<title>Re: 「例外」について</title>
<author>管理人(deko_pon)</author>
<link>http://fsharp.bbs.fc2.com/?act=reply&amp;tid=2479629</link>
<description><![CDATA[ありがとうございます。
先ほど修正&amp;amp;リンクさせて頂きました。
今後ともよろしくお願いします。]]></description>
<pubDate>Sun, 22 Feb 2009 20:14:33 +0900</pubDate>
</item>
<item>
<title>Re: 「例外」について</title>
<author>いげ太</author>
<link>http://fsharp.bbs.fc2.com/?act=reply&amp;tid=2479629</link>
<description><![CDATA[&amp;gt; failwithf
なるほど。あえて書かなかったと。網羅的に書くのはリファレンスの役目で、入門サイトとしては取捨選択して提示することが肝要、ですね。

&amp;gt; ブログへリンク
どうぞです。リンクフリーですー。]]></description>
<pubDate>Fri, 20 Feb 2009 21:36:26 +0900</pubDate>
</item>
<item>
<title>Re: 「例外」について</title>
<author>管理人(deko_pon)</author>
<link>http://fsharp.bbs.fc2.com/?act=reply&amp;tid=2479629</link>
<description><![CDATA[おわ、ApplicationExceptionクラスの箇所に確かに書いてますね、やってしまった・・ご指摘感謝です。
これ、.Net2.0からってことは・・.Netのプログラム経験があまりないのがばれてしまいます(笑
また、記事については後日修正したいと思います。

それと、例外の使い方については、少なくとももう一つは書く予定でいて、そのうちの一つはProgramming in OCamlに載っていたちょっと例外っぽくない使い方についてです。(忘れっぽいのでもう忘れたのですが・・また調べる予定)

failwithf
ご紹介、ありがとうございます。
実は、記事を書く際に]]></description>
<pubDate>Thu, 19 Feb 2009 22:34:44 +0900</pubDate>
</item>
</channel>
</rss>
