[#28402] crypt — Kenji Noda <zaq94465a@...>

野田です

58 messages 2001/03/01
[#28404] Re: crypt — gotoken@... (GOTO Kentaro) 2001/03/01

In message "[ruby-list:28402] crypt"

[#28410] Re: crypt — "Akinori MUSHA" <knu@...> 2001/03/02

At Fri, 2 Mar 2001 04:34:52 +0900,

[#28413] Re: crypt — "丹生 光則 Nibu,Mitsunori." <nibu@...> 2001/03/02

newです.

[#28419] Re: crypt — matz@... (Yukihiro Matsumoto) 2001/03/02

まつもと ゆきひろです

[#28421] Re: crypt — gotoken@... (GOTO Kentaro) 2001/03/02

ごとけんです

[#28424] Re: crypt — "丹生 光則 Nibu,Mitsunori." <nibu@...> 2001/03/02

newです.

[#28435] ruby 1.6.3? — akira yamada / やまだあきら <akira@...>

24 messages 2001/03/02
[#28440] Re: ruby 1.6.3? — matz@... (Yukihiro Matsumoto) 2001/03/02

まつもと ゆきひろです

[#28572] Re: ruby 1.6.3? — akira yamada / やまだあきら <akira@...> 2001/03/07

[#28621] Re: ruby 1.6.3? — akira yamada / やまだあきら <akira@...> 2001/03/09

[#28624] Re: ruby 1.6.3? — matz@... (Yukihiro Matsumoto) 2001/03/09

まつもと ゆきひろです

[#28821] Re: ruby 1.6.3? — akira yamada / やまだあきら <akira@...> 2001/03/17

[#28823] Re: ruby 1.6.3? — matz@... (Yukihiro Matsumoto) 2001/03/17

まつもと ゆきひろです

[#28829] Re: ruby 1.6.3? — Kazuhiro Yoshida <moriq.kazuhiro@...> 2001/03/18

もりきゅうです。

[#28831] Re: ruby 1.6.3? — Kazuhiro Yoshida <moriq.kazuhiro@...> 2001/03/18

もりきゅうです。

[#28454] Ruby 初心者は! — 有瀬 和徳 <crush@...>

Kazunori Aruse

17 messages 2001/03/03

[#28485] ruby/tk TkEntry#selection_present bug? — Noritsugu Nakamura <nnakamur@...>

22 messages 2001/03/04
[#28492] Re: ruby/tk TkEntry#selection_present bug? — Koji Arai <JCA02266@...> 2001/03/04

新井です。

[#28559] Re: ruby/tk TkEntry#selection_present bug? — nagai@... 2001/03/06

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

[#28562] Re: ruby/tk TkEntry#selection_present bug? — Noritsugu Nakamura <nnakamur@...> 2001/03/06

[#28615] Re: ruby/tk TkEntry#selection_present bug? — nagai@... 2001/03/09

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

[#28530] テキストファイルを固定文字数で切って、行番号をつけるプログラム — Keisuke Minami <keisuke@...>

こんばんは。三並です。

10 messages 2001/03/05

[#28599] 1.6 のダウンロードマニュアルが圧縮されていない? — Keisuke Minami <keisuke@...>

こんばんは。三並です。

71 messages 2001/03/08
[#28601] Re: 1.6 のダウンロードマニュアルが圧縮されていない? — rubikitch <rubikitch@...> 2001/03/08

From: Keisuke Minami <keisuke@rccn.com>

[#28602] Re: 1.6 のダウンロードマニュアルが圧縮されていない? — SHIBATA Hiroshi <h-sbt@...9.so-net.ne.jp> 2001/03/08

 SHIBATA Hiroshiです。

[#28603] Re: 1.6 のダウンロードマニュアルが圧縮されていない? — gotoken@... (GOTO Kentaro) 2001/03/08

In message "[ruby-list:28602] Re: 1.6 のダウンロードマニュアルが圧縮されていない?"

[#28606] Ruby 1.6.2 リファレンスマニュアル — rubikitch <rubikitch@...> 2001/03/08

From: Keisuke Minami <keisuke@rccn.com>

[#28617] Re: Ruby 1.6.2 リファレンスマニュアル — "丹生 光則 Nibu,Mitsunori." <nibu@...> 2001/03/09

newです.

[#28618] Re: Ruby 1.6.2 リファレンスマニュアル — rubikitch <rubikitch@...> 2001/03/09

From: "丹生 光則 Nibu,Mitsunori." <nibu@tec.osaka.jip.co.jp>

[#28622] Re: Ruby 1.6.2 リファレンスマニュアル — "丹生 光則 Nibu,Mitsunori." <nibu@...> 2001/03/09

newです.

[#28644] Re: Ruby 1.6.2 リファレンスマニュアル — Daisuke Aoki <dai@...> 2001/03/09

青木@横浜です。

[#28672] Re: Ruby 1.6.2 リファレンスマニュアル — rubikitch <rubikitch@...> 2001/03/10

From: Daisuke Aoki <dai@sweetparty.ne.jp>

[#28705] Re: Ruby 1.6.2 リファレンスマニュアル — Daisuke Aoki <dai@...> 2001/03/12

青木@横浜です。

[#28697] Re: Ruby 1.6.2 リファレンスマニュアル — Daisuke Aoki <dai@...> 2001/03/12

青木@横浜です。

[#28773] [Q] ChibiXML のサンプルみたいなもの — eda@...

えだです。

14 messages 2001/03/15
[#28782] Re: [Q] ChibiXML のサンプルみたいなもの — TAKAHASHI Masayoshi <maki@...> 2001/03/16

高橋征義です。

[#28852] Re: [ruby-ext:01642] Re: o_dbm — keiju@... (石塚圭樹)

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

17 messages 2001/03/19
[#29368] Re: [ruby-ext:01642] Re: o_dbm — akira yamada / やまだあきら <akira@...> 2001/04/21

[#29431] Re: [ruby-ext:01642] Re: o_dbm — keiju@... (石塚圭樹) 2001/04/26

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

[#29468] Re: [ruby-ext:01642] Re: o_dbm — akira yamada / やまだあきら <akira@...> 2001/05/01

[#28911] media watch 2001.03.22 — akira yamada / やまだあきら <akira@...>

27 messages 2001/03/22
[#28955] Re: media watch 2001.03.22 — Keisuke Minami <keisuke@...> 2001/03/24

こんばんは。三並です。

[#28974] Re: media watch 2001.03.22 — akira yamada / やまだあきら <akira@...> 2001/03/26

[#28993] Re: media watch 2001.03.22 — Noritsugu Nakamura <nnakamur@...> 2001/03/27

[#29023] 配列に要素を挿入 — Kenji Noda <zaq94465a@...>

野田と申します

15 messages 2001/03/30

[#29037] forwardable-1.0 release — keiju@... (Keiju ISHITSUKA)

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

25 messages 2001/03/30
[#29038] Re: forwardable-1.0 release — Toshiro Kuwabara <toshirok@...3.so-net.ne.jp> 2001/03/30

Toshです。

[#29042] Re: forwardable-1.0 release — matz@... (Yukihiro Matsumoto) 2001/03/31

まつもと ゆきひろです

[#29047] Re: forwardable-1.0 release — Toshiro Kuwabara <toshirok@...3.so-net.ne.jp> 2001/03/31

Toshです。

[#29057] Re: forwardable-1.0 release — keiju@... (石塚圭樹) 2001/04/02

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

[#29060] Re: forwardable-1.0 release — Toshiro Kuwabara <toshirok@...3.so-net.ne.jp> 2001/04/02

Toshです。

[ruby-list:28400] Re: 【要望】 EmacsLisp みたいなフック

From: gotoken@... (GOTO Kentaro)
Date: 2001-03-01 18:12:28 UTC
List: ruby-list #28400
ごとけんです

In message "[ruby-list:28380] Re: 【要望】 EmacsLisp みたいなフック"
    on 01/02/28, kai13@basil.freemail.ne.jp <kai13@basil.freemail.ne.jp> writes:
>実装について、フックと表現しましたが、
>EmacsLispではhookを利用しても、モードなどの作成に挫折したクチですので
>あまり厳密にとらえないでください(^^;。

厳密というか、それをフックと呼ぶのは誤解の素と思いました。

>begin # beginブロック
>  #beginブロック(a)
>hook
>  #hookブロック
>end

要するに、複数のブロックが渡したいんですよね。たとえば、以下
のような方法があります。

(どこかで聞いたような話ですが)複数のブロックを渡したい場合の
例として、2分木を深さ優先で「なぞる」(traverseする)ときがあ
ります。木をなぞりながらブロックを実行させるには、次の3つの
タイミングがあります:

  * あるノードに到達したとき
  * そのノードの左の枝の処理が終わったとき
  * そのノードの両方の枝の処理が終わったとき

これらを次のように指定できるようにすることが可能です。

  BinTree.traverse do |v|
    v.before do |node| ... end  # 達した
    v.middle do |node| ... end  # 左が終わった
    v.after  do |node| ... end  # 両方終わった
  end

これは traverse が2段階の動作をすることで実現されます。

  (1) 指定される「なぞり屋」 v をつくる。その動作の指定は
      ブロックで与える
  (2) v になぞらせる

ポイントは、ブロックパメータが要素をあらわす必要はないという
ことです。この場合は v がそうです。

# ちなみに、ぼくは以前、中田さんに Benchmark のパッチをもらっ
# たときに初めてこのことを理解しました。

-- Gotoken
# 参考までに、一つの実装例を示します。木の表示です:

class BinTree
  BEFORE, MIDDLE, AFTER = :before, :middle, :after

  def initialize(data, left = nil, right = nil)
    @data, @left, @right = data, left, right
  end

  def traverse(&block)
    traverse0(BinTree::Visitor.new(&block))
  end

  protected

  def traverse0(visitor)
    visitor.execute BEFORE, @data
    @left.traverse0 visitor if @left
    visitor.execute MIDDLE, @data
    @right.traverse0 visitor if @right
    visitor.execute AFTER, @data
  end

  class Visitor
    def initialize
      yield(self)
    end

    def before(&block)
      @before_proc = block
    end

    def middle(&block)
      @middle_proc = block
    end

    def after(&block)
      @after_proc = block
    end

    def execute(timing, data)
      case timing
      when BEFORE
	@before_proc.call data if @before_proc
      when MIDDLE
	@middle_proc.call data if @middle_proc
      when AFTER
	@after_proc.call data  if @after_proc
      end
    end
  end
end

# example

def BinTree(data, left = nil, right = nil)
  BinTree.new(data, left, right)
end

t = BinTree("red",
	    BinTree("blue",
		    BinTree("yellow"),
		    BinTree("pink")),
	    BinTree("green"))

indent = " "*8
lv = 0

t.traverse do |v|
  v.before do |i| 
    print ",\n" if lv > 0
    print indent*lv, "BinTree(#{i.inspect}"
    lv += 1
  end

  v.after do |i|
    print ")"
    lv -= 1
    print "\n" if lv.zero?
  end
end
__END__
# produces:

BinTree("red",
        BinTree("blue",
                BinTree("yellow"),
                BinTree("pink")),
        BinTree("green"))

In This Thread