[#7356] Q: jcode.rb tr(String + nil) — WATANABE Tetsuya <tetsu@...>

ruby-1.1b9_08 (07 からみたいですが)での話です。

15 messages 1998/04/08
[#7358] Re: Q: jcode.rb tr(String + nil) — matz@... (Yukihiro Matsumoto) 1998/04/08

まつもと ゆきひろです

[#7376] [Q] Thread — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

19 messages 1998/04/08
[#7384] Re: [Q] Thread — keiju@... (Keiju ISHITSUKA) 1998/04/09

けいじゅ@日本ラショナルソフトウェアです.

[#7385] Re: [Q] Thread — matz@... (Yukihiro Matsumoto) 1998/04/09

まつもと ゆきひろです

[#7391] Re: [Q] Thread — keiju@... (石塚圭樹 ) 1998/04/09

けいじゅ@日本ラショナルソフトウェアです.

[#7471] scope — Wakou Aoyama <wakou@...>

青山です。

22 messages 1998/04/15
[#7474] Re: scope — WATANABE Hirofumi <watanabe@...> 1998/04/15

わたなべです.

[#7475] Re: scope — Wakou Aoyama <wakou@...> 1998/04/15

青山です。

[#7500] List on List — WATANABE Hirofumi <watanabe@...>

わたなべです.

26 messages 1998/04/15
[#7501] Re: List on List — matz@... (Yukihiro Matsumoto) 1998/04/15

まつもと ゆきひろです

[#7509] クラスの変更 — Mitsuru Ogino <ogino@...>

荻野といいます。すみませんが、ご指導ください。プログラミング初心者です。

13 messages 1998/04/15

[#7591] How to write Perl's `@a[@b] = @c' in ruby — Inaba Hiroto <inaba@...>

えーと、既に「Perlのmapをrubyでどう書くか」という話題がで出てしまった

29 messages 1998/04/16
[#7601] Re: How to write Perl's `@a[@b] = @c' in ruby — WATANABE Hirofumi <watanabe@...> 1998/04/17

わたなべです.

[#7614] Re: How to write Perl's `@a[@b] = @c' in ruby — Shin-ichiro HARA <sinara@...> 1998/04/17

原です。

[#7626] Re: How to write Perl's `@a[@b] = @c' in ruby — Inaba Hiroto <inaba@...> 1998/04/19

From: Shin-ichiro HARA <sinara@blade.nagaokaut.ac.jp>

[#7628] Re: How to write Perl's `@a[@b] = @c' in ruby — Shin-ichiro Hara <sinara@...> 1998/04/19

原です。

[#7659] iteration with index (Re: How to write Perl's `@a[@b] = @c' in ruby) — shugo@... (Shugo Maeda) 1998/04/20

前田です。

[#7671] How to install beta versions — Shin-ichiro HARA <sinara@...>

原です。

32 messages 1998/04/21
[#7672] Re: How to install beta versions — matz@... (Yukihiro Matsumoto) 1998/04/21

まつもと ゆきひろです

[#7674] Re: How to install beta versions — WATANABE Hirofumi <watanabe@...> 1998/04/21

わたなべです.

[#7675] Re: How to install beta versions — WATANABE Tetsuya <tetsu@...> 1998/04/21

>>>>> "W" == WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp> writes:

[#7677] Re: How to install beta versions — Shin-ichiro HARA <sinara@...> 1998/04/21

原です。

[#7679] Re: How to install beta versions — WATANABE Hirofumi <watanabe@...> 1998/04/21

わたなべです.

[#7690] Re: How to install beta versions — Toshihiko SHIMOKAWA / 下川俊彦 <toshi@...> 1998/04/21

From: WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>

[#7700] Re: How to install beta versions — matz@... (Yukihiro Matsumoto) 1998/04/22

まつもと ゆきひろです

[#7710] Re: How to install beta versions — Toshihiko SHIMOKAWA / 下川俊彦 <toshi@...> 1998/04/22

From: matz@netlab.co.jp (Yukihiro Matsumoto)

[#7711] Re: How to install beta versions — matz@... (Yukihiro Matsumoto) 1998/04/22

まつもと ゆきひろです

[#7720] Re: How to install beta versions — chisaka@... 1998/04/23

[#7721] Re: How to install beta versions — matz@... (Yukihiro Matsumoto) 1998/04/24

まつもと ゆきひろです

[#7724] Re: How to install beta versions — NAGAI Hidetoshi <nagai@...> 1998/04/25

永井@知能.九工大です.

[#7729] mail index sort by From: — Kikutani Makoto <kikutani@...>

きくたにです。

27 messages 1998/04/26
[#7730] mail index sort by From: — gotoken@... (GOTO Kentaro) 1998/04/26

ごとけんです

[#7738] Re: mail index sort by From: — Kikutani Makoto <kikutani@...> 1998/04/27

きくたにです。

[#7757] Re: mail index sort by From: — gotoken@... (GOTO Kentaro) 1998/04/28

ごとけんです

[#7758] Re: mail index sort by From: — akira yamada / やまだあきら <akira@...> 1998/04/28

[#7760] Re: mail index sort by From: — gotoken@... (GOTO Kentaro) 1998/04/28

ごとけんです

[ruby-list:7286] cmp operator

From: NAGAI Hidetoshi <nagai@...>
Date: 1998-04-01 05:39:04 UTC
List: ruby-list #7286
永井@知能.九工大です.

<=> オペレータは -1, 0, 1 を返しますが,
ruby ではいずれの場合も論理評価すると true なのですよね?
ですが,== の場合は偽として評価してもらいたいと思ったことはないでしょうか?

例えば,メンバ mem_a, mem_b を持つある構造体クラスがあって,
その大小比較を定義したいというような場合です.
メンバのオブジェクト間の <=> は定義されているとして,
mem_a を高い優先順位として比較しようとすると,
-----------------------------------
def struct_cmp (a, b)
   c = a.mem_a <=> b.mem_a
   if (c == 0)
      a.mem_b <=> b.mem_b
   else
      c
   end
end
-----------------------------------
などとすることになるでしょう.

ですが,ここでもし == の場合には false を返すような比較オペレータ <> が
存在したとすると,例えば
-----------------------------------
def struct_cmp (a, b)
   (a.mem_a <> a.mem_a) || (a.mem_b <=> a.mem_b)
end
-----------------------------------
でよいということになります.
よけいな変数も不要ですし,すっきり書けるように私には思えます.

で,試しに ruby-1.1b9_06 に <> オペレータを追加する patch を作ってみました.
いかがでしょうか?

-- 
                                         永井 秀利 (九工大 知能情報)
                                             nagai@ai.kyutech.ac.jp
-----------------ここから---------------------------------
--- compar.c~	Fri Jan 16 21:35:43 1998
+++ compar.c	Wed Apr  1 13:51:38 1998
@@ -17,6 +17,17 @@
 static ID cmp;
 
 static VALUE
+cmp_necmp(x, y)
+    VALUE x, y;
+{
+    VALUE c = rb_funcall(x, cmp, 1, y);
+    int t = NUM2INT(c);
+
+    if (t == 0) return FALSE;
+    return c;
+}
+
+static VALUE
 cmp_eq(x, y)
     VALUE x, y;
 {
@@ -89,6 +100,7 @@
 Init_Comparable()
 {
     mComparable = rb_define_module("Comparable");
+    rb_define_method(mComparable, "<>", cmp_necmp, 1);
     rb_define_method(mComparable, "==", cmp_eq, 1);
     rb_define_method(mComparable, ">", cmp_gt, 1);
     rb_define_method(mComparable, ">=", cmp_ge, 1);
--- parse.y~	Wed Mar 25 18:39:37 1998
+++ parse.y	Wed Apr  1 13:49:47 1998
@@ -188,9 +188,10 @@
 %token UMINUS 		/* unary- */
 %token POW		/* ** */
 %token CMP  		/* <=> */
+%token NECMP  		/* <> */
 %token EQ  		/* == */
 %token EQQ  		/* === */
-%token NEQ  		/* != <> */
+%token NEQ  		/* != */
 %token GEQ  		/* >= */
 %token LEQ  		/* <= */
 %token ANDOP OROP	/* && and || */
@@ -222,7 +223,7 @@
 %nonassoc DOT2 DOT3
 %left  OROP
 %left  ANDOP
-%nonassoc  CMP EQ EQQ NEQ MATCH NMATCH
+%nonassoc  CMP NECMP EQ EQQ NEQ MATCH NMATCH
 %left  '>' GEQ '<' LEQ
 %left  '|' '^'
 %left  '&'
@@ -514,6 +515,7 @@
 		| '^'		{ $$ = '^'; }
 		| '&'		{ $$ = '&'; }
 		| CMP		{ $$ = CMP; }
+		| NECMP		{ $$ = NECMP; }
 		| EQ		{ $$ = EQ; }
 		| EQQ		{ $$ = EQQ; }
 		| MATCH		{ $$ = MATCH; }
@@ -655,6 +657,10 @@
 		    {
 			$$ = call_op($1, CMP, 1, $3);
 		    }
+		| arg NECMP arg
+		    {
+			$$ = call_op($1, NECMP, 1, $3);
+		    }
 		| arg '>' arg
 		    {
 			$$ = call_op($1, '>', 1, $3);
@@ -2372,6 +2378,11 @@
 	    pushback(c);
 	    return LEQ;
 	}
+	if (c == '>') {
+	    return NECMP;
+	    pushback(c);
+	    return '<';
+	}
 	if (c == '<') {
 	    if (nextc() == '=') {
 		yylval.id = LSHFT;
@@ -3915,6 +3926,7 @@
     '^',	"^",
     '&',	"&",
     CMP,	"<=>",
+    NECMP,	"<>",
     '>',	">",
     GEQ,	">=",
     '<',	"<",

In This Thread

Prev Next