リスト処理とか―Scala と C# と、時々、F#

「C#/Scala/Python/Ruby/F#でデータ処理はどう違うのか? - @IThttp://bit.ly/o6XEmV を基点とした、主に Scala 限定継続に関するお話とか。 ※@xuwei_k さんによる同件についての別のまとめが http://togetter.com/li/164658 とか http://togetter.com/li/165637 にあります。
17
前へ 1 ・・ 5 6
Kenji Yoshida @xuwei_k

そういう場合は、(限定継続使わないなら) Scalaでも Iterator を継承か、無名クラスで生成になるのかな・・・? http://t.co/8dvyFLm

2011-07-24 23:59:20
neuecc @neuecc

@ufcpp 演算子が手厚ければ、シチュエーションの9割は組み合わせで何とかなりますからねw でも、残り1割のシチュエーションが消せるかといったらそうではないので、変わらず大切ではあるな、と。

2011-07-25 00:02:43
kmizu @kmizu

@ufcpp なるほど。だとすると、こんな感じですか。 List(1, 1, 2, 2, 3, 3).view.flatMap{e => List(e, e)}.iterator

2011-07-24 23:59:18
kmizu @kmizu

@ufcpp 外部イテレータが作りにくいと思われるものとして、二分木からIteratorを生成するプログラムも書いてみました。Iteratorを自前で実装する余地が全く出てこないのがポイントです。 http://bit.ly/nIuKRM #scalajp

2011-07-25 00:00:33
++C++; // 管理人: 岩永 @ufcpp

@kmizu おお?これで、最終行、it.foreach じゃなくて、foreach ( x <- it) できます?

2011-07-25 00:11:15
++C++; // 管理人: 岩永 @ufcpp

あー、C# でも、IObservableを返すメソッドを作って、Observable.ToEnumerable使えば機能的にはyield要らないなぁ。ちょっとした使い勝手とか、効率とか考えるとやっぱりyield欲しいけど。

2011-07-25 00:14:16
++C++; // 管理人: 岩永 @ufcpp

あっ、そうでもないか。結構大変。

2011-07-25 00:15:57
kmizu @kmizu

@ufcpp 仕掛けとしては、ScalaではほぼあらゆるコレクションをIteratorにiteratorメソッドで変換できるので、Streamで遅延リストを作っておいて、最後にIteratorに変換するといった感じです。 #scalajp

2011-07-25 00:24:56
++C++; // 管理人: 岩永 @ufcpp

@kmizu 「Streamでできるよ」というのは他の方のコメントでもあったんですけども。ただ、見てる感じ、それも記事の趣旨からはずれている感がありますねぇ。

2011-07-25 00:30:54
kmizu @kmizu

@ufcpp 記事の趣旨からはずれている、というのはその通りかもしれません。ただ、Scalaとかの関数型かつ遅延データ構造を標準で持ってる言語だと、普通の制御フローからIteratorを生成する機能の需要というのは相対的にかなり少ないと思います。 #scalajp

2011-07-25 00:40:03
kmizu @kmizu

この、「再帰的に辿るもの」のケースでは、ScalaだとStreamとかで書いちゃうので、yieldの出番が無いわけか。繰り返し条件が変則的でも、特に問題は無いし。欲しいとしたら、繰り返しの間に副作用を起こしたい場合くらい? #scalajp

2011-07-25 00:43:34
前へ 1 ・・ 5 6