[#6219] Ruby連載 第4話 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

32 messages 1998/02/04
[#6221] Re: Ruby連載 第4話 — Shin-ichiro HARA <sinara@...> 1998/02/04

原です。

[#6224] Re: Ruby連載 第4話 — Yasunari Momoi <conan@...> 1998/02/04

ももちゃん@あるもにこすです.

[#6225] Re: Ruby連載 第4話 — matz@... (Yukihiro Matsumoto) 1998/02/04

まつもと ゆきひろです

[#6249] Re: i++ — 助田 雅紀 <masaki.suketa@...>

助田です。

33 messages 1998/02/04
[#6252] Re: i++ — gotoken@... (GOTO Kentaro) 1998/02/05

ことけんです

[#6255] Re: i++ — matz@... (Yukihiro Matsumoto) 1998/02/05

まつもと ゆきひろです

[#6260] Re: i++ — Yuji Shigehiro <sigehiro@...> 1998/02/05

しげひろです.

[#6314] RE: ruby's design policy (Re: I'd like to subscr ibe this ML) — 助田 雅紀 <masaki.suketa@...>

オブジェクト指向周辺をぶらぶらしている助田です。

11 messages 1998/02/06

[#6333] ruby 流に添削して下さい — nkon@...2.3web.ne.jp

13 messages 1998/02/07
[#6335] Re: ruby 流に添削して下さい — OZAWA Sakuro <crouton@...> 1998/02/07

さくです.

[#6372] ruby 1.1b7 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

24 messages 1998/02/10
[#6402] parsedate (Re: ruby 1.1b7 released) — WATANABE Hirofumi <watanabe@...> 1998/02/13

わたなべです.

[#6405] Re: parsedate (Re: ruby 1.1b7 released) — Tadayoshi Funaba <tadf@...> 1998/02/13

ふなばです。

[#6407] Re: parsedate (Re: ruby 1.1b7 released) — matz@... (Yukihiro Matsumoto) 1998/02/13

まつもと ゆきひろです

[#6373] call for scripts — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

133 messages 1998/02/10
[#6414] Re: call for scripts — Terutuoshi Kaneshiro <k-teru@...06.odn.ne.jp> 1998/02/14

金城です.

[#6428] Re: call for scripts — matz@... (Yukihiro Matsumoto) 1998/02/16

まつもと ゆきひろです

[#6448] Re: call for scripts — Terutuoshi Kaneshiro <k-teru@...06.odn.ne.jp> 1998/02/16

金城です.

[#6452] Re: call for scripts — matz@... (Yukihiro Matsumoto) 1998/02/17

まつもと ゆきひろです

[#6481] Re: call for scripts — Kikutani Makoto <kikutani@...> 1998/02/17

きくたに@ぷ〜たろ〜です。

[#6483] Re: call for scripts — OZAWA Sakuro <crouton@...> 1998/02/17

さくです.

[#6495] Re: call for scripts — WATANABE Hirofumi <watanabe@...> 1998/02/18

わたなべです.

[#6416] Re: call for scripts — shugo@... (Shugo Maeda) 1998/02/14

前田です。

[#6417] rgrep (Re: call for scripts) — shugo@... (Shugo Maeda) 1998/02/15

前田です。

[#6423] Re: rgrep (Re: call for scripts) — matz@... (Yukihiro Matsumoto) 1998/02/16

まつもと ゆきひろです

[#6612] Re: call for scripts — Tadayoshi Funaba <tadf@...> 1998/02/21

ふなばです。

[#6582] File::Separator on cygwin — OZAWA Sakuro <ozawa@...>

小澤さくです。

19 messages 1998/02/20
[#6583] Re: File::Separator on cygwin — WATANABE Hirofumi <watanabe@...> 1998/02/20

わたなべです.

[#6586] Re: File::Separator on cygwin — OZAWA Sakuro <ozawa@...> 1998/02/20

小澤さくです。

[#6591] ruby 1.1b8 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

32 messages 1998/02/20
[#6620] rbc.rb and binding — shugo@... (Shugo Maeda) 1998/02/22

前田です。

[#6629] Re: rbc.rb and binding — keiju@... (石塚圭樹 ) 1998/02/23

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

[#6643] Re: rbc.rb and binding — shugo@... (Shugo Maeda) 1998/02/23

前田です。

[#6649] Re: rbc.rb and binding — keiju@... (石塚圭樹 ) 1998/02/23

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

[#6650] Re: rbc.rb and binding — matz@... (Yukihiro Matsumoto) 1998/02/23

まつもと ゆきひろです

[#6667] JRI 0.5 worked (was Re: rbc.rb and binding) — OZAWA Sakuro <crouton@...> 1998/02/23

さくです.

[#6687] Re: JRI 0.5 worked (was Re: rbc.rb and binding) — shugo@... (Shugo Maeda) 1998/02/24

前田です。

[#6712] JRI and JDBC — OZAWA Sakuro <ozawa@...> 1998/02/24

小澤さくです。

[#6635] hello — WATANABE Tetsuya <tetsu@...>

渡辺哲也と申します。

15 messages 1998/02/23

[#6706] Re: Counter class — toyofuku@...

豊福@パパイヤです。

12 messages 1998/02/24

[#6735] Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda)

前田です。

27 messages 1998/02/24
[#6746] Re: Mutex/ConditionVariable/Queue — keiju@... (石塚圭樹 ) 1998/02/25

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

[#6747] Re: Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda) 1998/02/25

前田です。

[#6752] Re: Mutex/ConditionVariable/Queue — senda@... 1998/02/25

From: shugo@po.aianet.ne.jp (Shugo Maeda)

[#6754] Re: Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda) 1998/02/25

前田です。

[#6756] Re: Mutex/ConditionVariable/Queue — senda@... 1998/02/25

From: shugo@po.aianet.ne.jp (Shugo Maeda)

[#6786] Re: Mutex/ConditionVariable/Queue — senda@...

From: shugo@po.aianet.ne.jp (Shugo Maeda)

33 messages 1998/02/26
[#6791] Re: Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda) 1998/02/26

前田です。

[#6794] Re: Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda) 1998/02/26

前田です。

[#6796] Re: Mutex/ConditionVariable/Queue — keiju@... (石塚圭樹 ) 1998/02/26

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

[ruby-list:6493] Re: call for scripts

From: senda@...
Date: 1998-02-18 04:29:58 UTC
List: ruby-list #6493
From: keiju@rational.com (石塚圭樹 )
Subject: [ruby-list:6479] Re: call for scripts 
Date: Tue, 17 Feb 1998 23:02:54 +0900
Message-ID: <199802171318.WAA02938.keiju@bc.mbn.or.jp>
keiju> あと,
keiju> 
keiju> 3. パズル関係のプログラム
keiju> 4. パズル的なプログラム
keiju> 5. メソッドの連鎖がナガーク続くプログラム
keiju> 
keiju> なども, 採用される確立が高いと思います(ただし, 本文というかコラム扱い
keiju> になると思いますが(^^;;;). この分野にお強い方も多いみたいですので, 興
keiju> 味ある方は挑戦してみて下さいませ(__;;;


千田@リコーと申します。


サイン本ほしさにちょっと作ってみました。


いわゆる自己再生プログラムというやつです。
プログラムの実行結果が自分のソースコードとなるようなプログラムのことで

	% ruby xxx.rb | diff -c - xxx.rb

が何も出力を返さないようなプログラムxxx.rbのことをいいます。

C言語では

main(a){printf(a,34,a="main(a){printf(a,34,a=%c%s%c,34);}",34);}

がよく知られています。

これをまねしてrubyで書くと
(1)---------
#!/usr/local/bin/ruby
a='#!/usr/local/bin/ruby
a=%c%s%c;printf(a,39,a,39);
';printf(a,39,a,39);
------------
というぐあいになります。

# 最初Cと同じ構造にしようとしたらrubyでは引数の評価 -> 関数引数のbindの
# 関係がCと違うことに気づいてしまった。printf(a,...)のaのところで
#    undefined local variable or method `a'
# となってしまう。

これじゃああんまりおもしろくないので
  (1) printfを使わないで
  (2) ruby特有の機能を使って
  (3) 文字コードを仮定しないで(上の39は"を意味している)
出きるようなものを書いてみました。

(2)---------
#!/usr/local/bin/ruby
def once;yield"end;once{|x,y|print y;print x.inspect,',';p y;print x+'\n';}","#!/usr/local/bin/ruby\ndef once;yield"
end;once{|x,y|print y;print x.inspect,',';p y;print x+'
';}
------------ (注:2行目は長いのでmailでは折り返されてしまうかも知れない)

これでは何のことかわからないので解説しましょう。:-)
うえの(2)の中の自己言及している文字列を短く置き換えると

(2')---------
#!/usr/local/bin/ruby
def once;yield"xxx","yyy"
end;once{|x,y|print y;print x.inspect,',';p y;print x+'
';}
------------

となり(これならよめるでしょう)、実行結果は

yyy"xxx","yyy"
xxx

となります。iteratorの定義で文字列を定義し、実行部分でもとのソースコードと
相似な形に出力するように出力部を調整しているだけです。文字列に対する
inspectが""をつけて返してくれるおかげでこの部分はきれいに書けます。


上の2つは"まじめ"な方法で実現したものですが、実は"ふざけた"方法で自己再生
プログラムを作ることができます。
それは、、、


(3)---------
#!/usr/local/bin/ruby
a=open($0,"r")
while a.gets
	print $_
end
------------
# 飛び道具攻撃 !!

説明は不要でしょう。 :-)

では。

---
+--------------------------------------------------------------------+
| (株)リコー SS事業本部 周辺機器開発部 開発2グループ                |
|                              千田滋也 (senda@ic.rdc.ricoh.co.jp)   |
+--------------------------------------------------------------------+

In This Thread