[#11357] [PATCH] an analogue of `long long' — "Nobuyoshi.Nakada" <nobu.nakada@...>
なかだです。
まつもと ゆきひろです
えぐち@エスアンドイー です。
まつもと ゆきひろです
えぐち@エスアンドイー です。
まつもと ゆきひろです
>From: matz@zetabits.com (Yukihiro Matsumoto)
まつもと ゆきひろです
[#11440] class Character (was: Ruby I18N) — Yasushi Shoji <yashi@...>
[ruby-dev:11428] からの続きですが、threadは切りました。
高橋征義です。用語について。
At Wed, 8 Nov 2000 20:44:55 +0900,
高橋征義です。
At Thu, 9 Nov 2000 13:30:34 +0900,
まつもと ゆきひろです
[#11447] gets は secure? — Kazuhiro NISHIYAMA <zn@...>
出力がInsecureなのに入力はsecureなのでしょうか?
[#11467] debug write in regex.c? — "Nobuyoshi.Nakada" <nobu.nakada@...>
なかだです。
[#11500] rb_to_integer/rb_to_int — "Nobuyoshi.Nakada" <nobu.nakada@...>
なかだです。
[#11520] A problem of Socket methods on Windows — OKA Toshiyuki <oka@...>
岡と申します。
なかだです。
まつもと ゆきひろです
なかだです。
岡です。
なかだです。
なかだです。
岡です。
なかだです。
[#11569] blocking on socket? — Shugo Maeda <shugo@...>
前田です。
[#11591] object.c パッチ — Kazuhiro NISHIYAMA <zn@...>
使われてなかったnil_plusの削除とOBJ_INFECTへの変更です。
[#11611] return value of waitpid2 — Koji Arai <JCA02266@...>
新井です。
まつもと ゆきひろです
荒井です。いや、新井です。(よくあることさ)
まつもと ゆきひろです
新井です。
新井です。
[#11618] Re: class variable — "Koji Arai" <jca02266@...>
新井です
なかだです。
まつもと ゆきひろです
> まつもと ゆきひろです
まつもと ゆきひろです
まつもと ゆきひろです
新井です。
[#11641] eval too slow — Wakou Aoyama <wakou@...>
青山です。
[#11650] conflict of NODE_DREGX_ONCE — "Nobuyoshi.Nakada" <nobu.nakada@...>
なかだです。
まつもと ゆきひろです
[#11662] IO (Re: fork problem?) — Tanaka Akira <akr@...17n.org>
In article <E140cR3-0002ls-00@ev.netlab.zetabits.co.jp>,
まつもと ゆきひろです
In article <E140fxW-0002u9-00@ev.netlab.zetabits.co.jp>,
In article <hvor93w5wb8.fsf@coulee.m17n.org>,
In article <hvoofz05uwz.fsf@coulee.m17n.org>,
まつもと ゆきひろです
新井です。
まつもと ゆきひろです
In article <E141eaC-0003w0-00@ev.netlab.zetabits.co.jp>,
まつもと ゆきひろです
In article <E142ZqF-0004rX-00@ev.netlab.zetabits.co.jp>,
まつもと ゆきひろです
In article <E143Zem-000271-00@ev.netlab.zetabits.co.jp>,
まつもと ゆきひろです
In article <E143amj-00028V-00@ev.netlab.zetabits.co.jp>,
[ruby-dev:11599] Re: accumulator, Enumerable#{foldr,foldl}
立石です.
At Sun, 19 Nov 2000 11:27:39 +0900,
立石 wrote:
> あるいは,Enumerable#{foldl,foldr}のようなものが標準で欲しいので
> すがユーザが定義するべきでしょうか? 個人的には結構使えそうな気が
>
> [a1,a2,...,an].foldl(a0){|x,y| f(x,y)}
> => f(f(...(f(a0,a1),a2)...))
>
> [a1,a2,...,an].foldr(a0){|x,y| f(x,y)}
> => f(a1,f(a2,f(...,f(an,a0))))
一応,Enumerableの方は実装してみました
が,こんな感じでいいのでしょうか?
--
Takaaki Tateishi <ttate@jaist.ac.jp>
http://kt-www.jaist.ac.jp:8000/~ttate/
Index: enum.c
===================================================================
RCS file: /home/cvs/ruby/enum.c,v
retrieving revision 1.11
diff -c -r1.11 enum.c
*** enum.c 2000/05/24 04:33:54 1.11
--- enum.c 2000/11/19 03:02:47
***************
*** 322,327 ****
--- 322,371 ----
return Qnil;
}
+ static VALUE
+ foldl_i(val, memo)
+ VALUE val;
+ NODE *memo;
+ {
+ memo->u3.value = rb_yield(rb_assoc_new(memo->u3.value, val));
+ return Qnil;
+ }
+
+ static VALUE
+ enum_foldl(obj, init)
+ VALUE obj, init;
+ {
+ NODE *memo = rb_node_newnode(NODE_MEMO, 0, 0, 0);
+
+ memo->u3.value = init;
+ rb_iterate(rb_each, obj, foldl_i, (VALUE)memo);
+ rb_gc_force_recycle((VALUE)memo);
+ return memo->u3.value;
+ };
+
+ static VALUE
+ foldr_i(val, memo)
+ VALUE val;
+ NODE *memo;
+ {
+ memo->u3.value = rb_yield(rb_assoc_new(val, memo->u3.value));
+ return Qnil;
+ }
+
+ static VALUE
+ enum_foldr(obj, init)
+ VALUE obj, init;
+ {
+ NODE *memo = rb_node_newnode(NODE_MEMO, 0, 0, 0);
+ ID id_reverse = rb_intern("reverse");
+
+ memo->u3.value = init;
+ rb_iterate(rb_each, rb_funcall(obj,id_reverse,0,0), foldr_i, (VALUE)memo);
+ rb_gc_force_recycle((VALUE)memo);
+ return memo->u3.value;
+ };
+
+
void
Init_Enumerable()
{
***************
*** 344,349 ****
--- 388,395 ----
rb_define_method(rb_mEnumerable,"member?", enum_member, 1);
rb_define_method(rb_mEnumerable,"include?", enum_member, 1);
rb_define_method(rb_mEnumerable,"each_with_index", enum_each_with_index, 0);
+ rb_define_method(rb_mEnumerable,"foldl", enum_foldl, 1);
+ rb_define_method(rb_mEnumerable,"foldr", enum_foldr, 1);
id_eqq = rb_intern("===");
id_each = rb_intern("each");