[#7288] plain2 + popmail — tateishi@...
立石です。
わたなべです.
[#7292] Exception in ruby — TAKAHASHI Masayoshi <maki@...>
高橋です。
[#7315] recovery of exception — tateishi@...
立石です。
[#7330] sub, gsub bug? — 金子尚史 <wbs01621@...>
はじめまして、金子と申します。
[#7334] — Kazutomi Ueda <ueda@...>
上田と申します。
[#7342] '$' in regexp — TAKAHASHI Masayoshi <maki@...>
高橋です。こんばんは。
[#7354] def foo=(a,b) — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
[#7356] Q: jcode.rb tr(String + nil) — WATANABE Tetsuya <tetsu@...>
ruby-1.1b9_08 (07 からみたいですが)での話です。
まつもと ゆきひろです
さっそく対応していただきてありがとうございます。
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
[#7376] [Q] Thread — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
前田です。
まつもと ゆきひろです
[#7386] Dir.foreach — "Hiroshi Ishikawa(NIMS)" <h-isikaw@...16.nims.nec.co.jp>
いしかわ@NIMS です。
[#7388] inf-ruby.el — senda@...
[#7410] irb — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
[#7442] telnet.rb — Wakou Aoyama <wakou@...>
青山です。
[#7464] subscribe for ruby-list — Kazuhiro HIWADA <hiwada@...>
ひわだといいます。はじめまして。
[#7471] scope — Wakou Aoyama <wakou@...>
青山です。
わたなべです.
青山です。
[#7492] Tcl/Tk fileevent — NAGAI Hidetoshi <nagai@...>
永井@知能.九工大です.
きくたに@ぷ〜たろ〜です。
永井@知能.九工大です.
[#7500] List on List — WATANABE Hirofumi <watanabe@...>
わたなべです.
まつもと ゆきひろです
永井@知能.九工大です.
まつもと ゆきひろです
「Perlのmapをrubyでどう書くか」というネタはMLに入る前から暖めていたの
けいじゅ@日本ラショナルソフトウェアです.
わたなべです.
まつもと ゆきひろです
[#7509] クラスの変更 — Mitsuru Ogino <ogino@...>
荻野といいます。すみませんが、ご指導ください。プログラミング初心者です。
[#7582] Re: List on List — Makoto Nukui <gnue@...>
こんにちは、GNUE(鵺)です。
[#7591] How to write Perl's `@a[@b] = @c' in ruby — Inaba Hiroto <inaba@...>
えーと、既に「Perlのmapをrubyでどう書くか」という話題がで出てしまった
わたなべです.
原です。
From: Shin-ichiro HARA <sinara@blade.nagaokaut.ac.jp>
原です。
前田です。
From: shugo@po.aianet.ne.jp (Shugo Maeda)
まつもと ゆきひろです
原です。
[#7622] dir search — Kikutani Makoto <kikutani@...>
きくたにです。
[#7648] new irb release — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
[#7671] How to install beta versions — Shin-ichiro HARA <sinara@...>
原です。
まつもと ゆきひろです
わたなべです.
>>>>> "W" == WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp> writes:
原です。
わたなべです.
From: WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
まつもと ゆきひろです
From: matz@netlab.co.jp (Yukihiro Matsumoto)
まつもと ゆきひろです
まつもと ゆきひろです
永井@知能.九工大です.
まつもと ゆきひろです
[#7713] Re: private and protected — Makoto Nukui <gnue@...>
Yukihiro Matsumoto:
[#7723] shared library of ruby — ttate@...
立石です。
[#7727] Re: [ruby-dev:2503] library for Tcl/Tk ext-package — NAGAI Hidetoshi <nagai@...>
永井@知能.九工大です.
永井@知能.九工大です.
永井@知能.九工大です.
[#7729] mail index sort by From: — Kikutani Makoto <kikutani@...>
きくたにです。
ごとけんです
きくたにです。
はじめまして、道村といいます。
ごとけんです
ごとけんです
わたなべです.
原です。
ごとけんです
原です。
[#7764] reference manual for ruby 1.1b9_16 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
黒田です。
まつもと ゆきひろです
わたなべです.
まつもと ゆきひろです
わたなべです.
[ruby-list:7286] cmp operator
永井@知能.九工大です.
<=> オペレータは -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, ">=",
'<', "<",