[racket-dev] `take' argument order

From: Eli Barzilay (eli at barzilay.org)
Date: Wed Jun 8 10:12:21 EDT 2011

10 minutes ago, Robby Findler wrote:
> On Wed, Jun 8, 2011 at 8:55 AM, Eli Barzilay <eli at barzilay.org> wrote:
> >
> > [Yes, that's true regardless.  If `take' in plain `racket' stays
> > as is, then eventually the one in lazy will need to change.  It
> > just happened to be the first thing that made me look at the order
> > more closely, and discover thet other issues.  As another point,
> > the justification for the argument order in Haskell is not
> > laziness but its implicit currying -- so of course it shouldn't be
> > a reason to make lazy racket follow it.]
> So, part of the discussion is changing the argument order for strict
> Racket's take?

Yes.  The problem is that `racket/list' followed srfi-1 which
contradicts Haskell, and Clojure (and very likely more), *and* it also
contradicts its own `take-while':

  (take list n)
  (take-while pred list)

> That seems difficult, for backward compatibility reasons.

My suggestion, to accommodate legacy code, is to allow *both* orders,
which is possible if improper lists are forbidden.  (I said that I'm
fine with just changing it, but the compatibility issue is probably
making that impractical.)

          ((lambda (x) (x x)) (lambda (x) (x x)))          Eli Barzilay:
                    http://barzilay.org/                   Maze is Life!

Posted on the dev mailing list.