Feature #6817

Partial application

Added by Michael Kohl over 1 year ago. Updated about 1 year ago.

Assignee:Yukihiro Matsumoto
Target version:next minor



I know that what I propose here is a significant change to Ruby, but it's part of my ongoing quest to get some more functional programming features into Ruby (see also #4539 and #6373).

I was wondering if it would make sense to maybe introduce partial application to Ruby? So that instead of

(1..3).map { |i| i + 2 }

or the somewhat unwieldy


one could just write


which I think has a quite rubyish feel to it. I have a POC implementation in Ruby (I tried it with various Fixnum methods) over at my blog (((URL:http://citizen428.net/blog/2012/07/30/ruby-left-section-for-infix-operators))), but that was just a quick hack and obviously I don't want to monkey-patch every method with arity 1, but it was a nice way of exploring possible syntax.

Related issues

Related to ruby-trunk - Feature #4539: Array#zip_with Assigned 03/30/2011
Related to ruby-trunk - Feature #6373: public #self Feedback 04/28/2012


#1 Updated by Shyouhei Urabe over 1 year ago

  • Description updated (diff)


#2 Updated by Yutaka HARA over 1 year ago

  • Target version changed from 2.0.0 to next minor

#3 Updated by Koichi Sasada about 1 year ago

  • Assignee set to Yukihiro Matsumoto

This ticket is related to [ruby-trunk - Feature #7939]?
(definitely no?)

Basically, I like this proposal.
But I'm not sure this notation can be acceptable.

FYI: Scheme has similar, but more flexible proposal:

(cut cons (+ a 1) <>) is the same as (lambda (x2) (cons (+ a 1) x2))
(cut list 1 <> 3 <> 5) is the same as (lambda (x2 x4) (list 1 x2 3 x4 5))
(cut list) is the same as (lambda () (list))
(cut list 1 <> 3 <...>) is the same as (lambda (x2 . xs) (apply list 1 x2 3 xs))
(cut <> a b) is the same as (lambda (f) (f a b))

Of course, it is not ruby's way. This is only sample of the other language.

Also available in: Atom PDF