From: Tobias Nurmiranta Date: 2004-02-25T17:34:56+09:00 Subject: Re: Need examples comparing Ruby to Python Hi, On Wed, 25 Feb 2004, Jim Weirich wrote: > The Python and Scheme examples are a bit different. Yes, thats why I had a comment in the scheme code. > The Scheme version in Ruby ... > > oneplus = lambda {|x| x+1 } > def compose(f, g) > lambda { |x| f[g[x]] } > end > compose(oneplus, oneplus) [1] #=> 3 Ah interesting, so one can use f[x] instead of f.call(x), by defining [] in Method. But if you want to call compose with defined functions instead of lambdas, you have to use: compose(method(:f1), method(:f2)) I guess that this syntax "overhead" is due to that we want to be able to call function f with "f" instead of "f()". Otherwise functions could be passed as arguments more easily, with one syntax to call them. Given "oneplus = lambda {|x| x + 1}" wouldn't it be possible to call the function with "oneplus(1)", implemented so that the interpreter checks if it is a Method instance, and then calls the method. Then you wouldn't have to have several ways to call a function. > The Python version of compose is more like this ... > > def compose(f, g, x) > f[g[x]] > end My python interpreter (2.3.2) doesn't accept this code. , Tobias