[#1215] Tk widget demo; English Tk docs?; Java 1.2 Swing — "Conrad Schneiker" <schneiker@...>
Hi,
[#1218] Trivial FAQ bug — Dave Thomas <Dave@...>
[#1229] A vote for old behavior — Dave Thomas <Dave@...>
[#1232] Any FAQ requests, updates, ... — Dave Thomas <Dave@...>
[#1233] Singleton classes — Dave Thomas <Dave@...>
[#1263] Draft of the updated Ruby FAQ — Dave Thomas <Dave@...>
[#1307] Ruby/GTK 0.23 released — Hiroshi IGARASHI <igarashi@...>
Hi all,
From: Hiroshi IGARASHI <igarashi@ueda.info.waseda.ac.jp>
From: "Conrad Schneiker" <schneiker@jump.net>
On Fri, Feb 18, 2000 at 09:37:27PM -0500, Yasushi Shoji wrote:
[#1322] FAQ: Ruby acronyms — "Conrad Schneiker" <schneiker@...>
In the spirit of TABWTDI (there are better ways to do it), I'd like to
[#1341] Vim syntax file — Mirko Nasato <mirko.nasato@...>
Hi,
On Mon, Feb 14, 2000 at 05:44:39PM +0100, Mirko Nasato wrote:
[#1354] Say hi (bis) — Pixel <pixel_@...>
hi all,
[#1355] nice sample for functional stuff — Pixel <pixel_@...>
what about having map in standard (and map_index too)?
[#1373] Ruby Language Reference Manual--Glossary — "Conrad Schneiker" <schneiker@...>
I was going to print the Ruby Language Reference Manual when I noticed that
[#1376] Re: Scripting versus programming — Andrew Hunt <andy@...>
Conrad writes:
[#1379] Re: Yield — Andrew Hunt <andy@...>
>From: "Conrad Schneiker" <schneiker@jump.net>
[#1384] Re: Say Hi — mengx@...
My suggestion was to try to find a more comfortable method name (to me, and
[#1392] Re: Some Questions - Parameterised Types / Invariants — Andrew Hunt <andy@...>
>1. Parameterised Types / Template Classes
[#1398] Bignum aset — Andrew Hunt <Andy@...>
[#1488] Discussion happens on news.groups — Clemens Hintze <c.hintze@...>
Hi,
[#1508] Ruby/GTK and the mainloop — Ian Main <imain@...>
Hello Ian,
On Wed, Feb 23, 2000 at 02:56:10AM -0500, Yasushi Shoji wrote:
[#1516] Ruby: PLEASE use comp.lang.misc for all Ruby programming/technical questions/discussions!!!! — "Conrad Schneiker" <schneiker@...>
((FYI: This was sent to the Ruby mail list.))
From: "Conrad Schneiker" <schneiker@jump.net>
[#1528] ruby <=> python — Quinn Dunkan <quinn@...>
Hello! I'm new to ruby-talk, and mostly new to ruby. I'm making a document
[#1551] Ruby thread scheduling buglet — Ian Main <imain@...>
[#1569] Re: Ruby: constructors, new and initialise — Yukihiro Matsumoto <matz@...>
The following message is a courtesy copy of an article
[#1591] Certain char's not recognized by "." in regex? — Wes Nakamura <wknaka@...>
[#1592] Race condition in Singleton — Dave Thomas <Dave@...>
[ruby-talk:01364] Re: nice sample for functional stuff
Hi,
In message "[ruby-talk:01355] nice sample for functional stuff"
on 00/02/15, Pixel <pixel_@mandrakesoft.com> writes:
>what about having map in standard (and map_index too)?
As Matz said, methods in Enumerable module may help you.
By the way, once I wrote `sum' with callcc as follows.
Enjoy :-)
-- gotoken
______________________________________________________________________
module Enumerable
class Cursor
EOE = Object.new # end of stream
def EOE.to_s; 'END_OF_ENUM' end
def initialize(iter)
@iter = iter
@cont = nil
end
def next
callcc{|@cc|
@cont.call if @cont
@iter.call {|obj|
callcc{|@cont| @cc.call(obj) }
}
@cc.call(EOE)
}
end
end
def sum_with_index
i = 0
c = Cursor.new(self.method(:each))
if iterator?
return nil if (s = c.next) == Cursor::EOE
s = yield(s,i)
until (elm = c.next) == Cursor::EOE
s += yield(elm,i)
end
s
else
return nil if (s = c.next) == Cursor::EOE
until (elm = c.next) == Cursor::EOE
s += elm
end
s
end
end
def sum(&blk)
if iterator?
sum_with_index{|elm,i| yield(elm)}
else
sum_with_index{|elm,i| elm}
end
end
def average(&blk)
if iterator?
sum_with_index{|elm,i| yield(elm)}/size.to_f
else
sum_with_index{|elm,i| elm}/size.to_f
end
end
end
def sum(*args, &blk)
args.sum(&blk)
end
def average(*args, &blk)
args.average(&blk)
end
####### examples #######
ary = [1,2,3,4]
#=> [1, 2, 3, 4]
ary.sum
#=> 10
ary.sum{|k| k*k}
#=> 30
sum(ary)
#=> [1, 2, 3, 4]
sum(*ary){|k| k*k}
#=> 30
sum(1,2,3,4){|k| k*k}
#=> 30
words = %w(foo bar baz)
#=> ["foo", "bar", "baz"]
words.sum
#=> "foobarbaz"
words.sum{|w| w.capitalize}
#=> "FooBarBaz"
hash = {"Foo" => 1, "Bar" => 2, "Baz" => 3, "Quux" => 4}
#=> {"Baz"=>3, "Bar"=>2, "Foo"=>1, "Quux"=>4}
hash.sum{|name,value| name =~ /^B/ ? value : 0}
#=> 5
class Tree
include Enumerable
def Tree.[](*args)
Tree.new(*args)
end
def initialize(value, children = [])
children = [children] unless children.is_a? Array
@value = value
@children = children.collect{|c| c.is_a?(Tree) ? c : Tree.new(c)}
end
attr_reader :value, :children
def each(&blk)
yield(self)
@children.each{|c| c.each(&blk)}
end
def leaf?
@children.empty?
end
def method_missing(mid, *args, &blk)
@value.__send__(mid, *args, &blk)
end
end
tree = Tree[1,[Tree[2,[Tree[3]]],Tree[4]]]
#=> #<Tree: @children=[#<Tree: @children=[#<Tree: @children=[], @value=3>], @value=2>, #<Tree: @children=[], @value=4>], @value=1>
tree.sum
#=> 10
tree.sum{|n| if n.leaf? then n else 0 end}
#=> 7