[#10209] Market for XML Web stuff — Matt Sergeant <matt@...>

I'm trying to get a handle on what the size of the market for AxKit would be

15 messages 2001/02/01

[#10238] RFC: RubyVM (long) — Robert Feldt <feldt@...>

Hi,

20 messages 2001/02/01
[#10364] Re: RFC: RubyVM (long) — Mathieu Bouchard <matju@...> 2001/02/05

[#10708] Suggestion for threading model — Stephen White <spwhite@...>

I've been playing around with multi-threading. I notice that there are

11 messages 2001/02/11

[#10853] Re: RubyChangeRequest #U002: new proper name for Hash#indexes, Array#indexes — "Mike Wilson" <wmwilson01@...>

10 messages 2001/02/14

[#11037] to_s and << — "Brent Rowland" <tarod@...>

list = [1, 2.3, 'four', false]

15 messages 2001/02/18

[#11094] Re: Summary: RCR #U002 - proper new name fo r indexes — Aleksi Niemel<aleksi.niemela@...>

> On Mon, 19 Feb 2001, Yukihiro Matsumoto wrote:

12 messages 2001/02/19

[#11131] Re: Summary: RCR #U002 - proper new name fo r indexes — "Conrad Schneiker" <schneik@...>

Robert Feldt wrote:

10 messages 2001/02/19

[#11251] Programming Ruby is now online — Dave Thomas <Dave@...>

36 messages 2001/02/21

[#11469] XML-RPC and KDE — schuerig@... (Michael Schuerig)

23 messages 2001/02/24
[#11490] Re: XML-RPC and KDE — schuerig@... (Michael Schuerig) 2001/02/24

Michael Neumann <neumann@s-direktnet.de> wrote:

[#11491] Negative Reviews for Ruby and Programming Ruby — Jim Freeze <jim@...> 2001/02/24

Hi all:

[#11633] RCR: shortcut for instance variable initialization — Dave Thomas <Dave@...>

13 messages 2001/02/26

[#11652] RE: RCR: shortcut for instance variable initialization — Michael Davis <mdavis@...>

I like it!

14 messages 2001/02/27

[#11700] Starting Once Again — Ron Jeffries <ronjeffries@...>

OK, I'm starting again with Ruby. I'm just assuming that I've

31 messages 2001/02/27
[#11712] RE: Starting Once Again — "Aaron Hinni" <aaron@...> 2001/02/27

> 2. So far I think running under TextPad will be better than running

[#11726] Re: Starting Once Again — Aleksi Niemel<zak@...> 2001/02/28

On Wed, 28 Feb 2001, Aaron Hinni wrote:

[ruby-talk:11152] Re: RCR's

From: "Christoph Rippel" <crippel@...>
Date: 2001-02-20 04:50:11 UTC
List: ruby-talk #11152
> From: Mathieu Bouchard [mailto:matju@cam.org]
> On Wed, 14 Feb 2001, Robert Feldt wrote:
> > class Proc
> >   def *(other)
> >     raise unless arity == other.arity
> >     proc {|*a| self.call(other.call(*a))}
> >   end
> > end
> 
> wouldn't that be "raise unless arity == 1" ?
Actually you are both wrong (the prototypical left/right 
confusion I never get straight;-) - the ``argument arity'' 
and the ``arity of the return type'' need to match but the 
ladder is always -1 that is one element. 

Morally this is false because this one element (object) is often
an array or more generally an object of a collection class
and it is tempting to use argument separation to compose more
general functions. The basic example is
class Proc
def *(other)
    lambda { |a|  l, *r = other.call(a); self.call(l,*r)}
end
end
The trouble is that the ``return signature'' is not an invariant
for Ruby function and it is not worth the trouble to implement
composition with general argument separation IMO.

I like (the restricted form) of Roberts function composition
proposal but it needs to be supported in the core language
IMO - here is a partial solution (note the arity semantics
recently changed if I remember correctly).

class Proc
def *(other)
  raise 'whatever' unless arity ==  -1
    case other.arity
      when 0  
       lambda {||  self.call(other.call)  }
      when -1
       lambda {|a|  self.call(other.call(a))  }
      when 2
       lambda {|a,b|  self.call(other.call(a,b))  } 
      when -2 
       lambda {|a,*b|  self.call(other.call(a,*b))  } 
      else
       raise 'not implemented'
    end
end
end

# varying return signature
# note the ``return arity'' is always -1 
def aa(n)
  return n    if n < 5 
  return  4,n          
end                   
                    
a = lambda { |x| aa(x) }
b = lambda { |x|  x[0]+ x[1] }

p a.arity
p b.arity
c = b * a

p c.arity
p c.call(5) # => 9
p c.call(4) # => 0 - don't know why
            # should raise an exception
[...]

I also wanted to point out that the other functional
programming idea - i.e. ``suspend'' - cannot be 
implemented with Progs IMO.

Christoph

 

In This Thread

Prev Next