リスト処理とか―Scala と C# と、時々、F#
Scalaの「パイプライン化」がトレイトって、どういう意味だろう? http://www.atmarkit.co.jp/fdotnet/chushin/comparedataproc_01/comparedataproc_01_01.html
2011-07-22 16:38:27@bleis 基本的に、欲しいのはインターフェイスに対するアルゴリズムの後置きメソッド記法になるはずです。トレイト=実装を持てる(メンバー関数を持てる)インターフェイスという扱いです。
2011-07-22 16:39:51@ufcpp あと集計ですけど、AggregateとscanLeftとreduceって、かなりバラバラな気がします。Aggregate/foldLeft/foldの方がいいんじゃ?
2011-07-22 16:41:56@bleis まあ、脚注に入ってますけども、トレイト+implicitですねぇ(まあ、個人的にimplicit conversionはクソ仕様だと思っていますが)。LINQに直接対応するのはIterableのmapとかですし。
2011-07-22 16:44:13@ufcpp トレイトであることは必須ではなくて、クラスでもできますよね。なので、クラス/トレイト + implicit conversionかなー
2011-07-22 16:45:24@bleis まあ、それはC# の拡張メソッドでも同じなんですが<クラスでもできる。が、LINQなんかを見ての通り、一番ありがたいのはインターフェイスに対する実装の追加という部分になります。機能ベースでなく、目的ベースで言うと。
2011-07-22 16:47:58@ufcpp んー、そこらへんはScalaだと、implicit conversion用のメソッドを用意するので、インターフェイス(トレイト)に対する実装の追加というのはimplicit conversion用のメソッドの引数側の話で、戻り値の型側の話ではないのでは?
2011-07-22 16:49:39@bleis 機能としてはインターフェイスが実装を持つ(トレイト)というのと、実装を後から追加する(暗黙型変換)というのがありますけども。どっちかというとそういう機能的な話ではなくて、データ処理、パイプライン型のコーディングという目的で見てるので。
2011-07-22 16:54:12@bleis Iterableにmapやfilterを付けるとして、じゃあ、それはどうしようと。Scala標準のはトレイトに実装与えてますけども、もちろん、暗黙型変換でやってもよかったと思いますよ。
2011-07-22 16:55:28ScalaとかF#にイテレータ・ブロックとかジェネレータ的なものがないのは、イミュータブルなコレクションが手厚いから不要という説
2011-07-22 16:52:02@bleis いや、F# はシーケンス式(ブロックの必要なくて、式がそもそも制御構文持てる)があるじゃないですか。
2011-07-22 16:58:34@ufcpp C#のyieldって、独自のコレクション的なクラスを作る時にも使うので、その観点で見るとそもそもクラス作る必要がない、とかそんな感じです
2011-07-22 17:02:57@bleis うーん、ただ、mapとかfilterを作るのにもyieldは必要なはずで。そして、mapやfilterは特定のコレクションの実装であってはいけなくて、IEnumerableみたいなインターフェイスに対する実装でなければいけないはず。
2011-07-22 17:06:06@bleis ScalaやF# は標準ライブラリの中で頑張ってるから、コレクション利用者が必要としないという意味では正しいです<yield。が、じゃあ、標準にないコレクション操作が全くない、将来にわかっても標準で十分かというと、そうでもないはずです。
2011-07-22 17:07:54@bleis それをいうと、C# でも出番少ないんですよ。LINQでほぼそろうので。が、出番が0ではない&不要というのは利用者視点過ぎるかなと。
2011-07-22 17:15:19@ufcpp あと、最初のテーブルですけど、ScalaにはgroupByありますし、scanLeftじゃなくてfoldLeftです。
2011-07-22 17:14:012.8からでは?(´・ω・`) RT @bleis Scala2.9から限定継続があるので、イテレータブロック的なものも実現可能です
2011-07-22 17:21:03@bleis うーん、情報が少ない…<限定継続。今回のは2.7ベースで書いてるものの、情報あれば書いてましたねぇ。foldLeftのは修正依頼を出しておきます。
2011-07-22 17:24:47