[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Function binders in Elisp?
From: |
Pascal Bourguignon |
Subject: |
Re: Function binders in Elisp? |
Date: |
19 Apr 2005 00:45:57 +0200 |
User-agent: |
Gnus/5.09 (Gnus v5.9.0) Emacs/21.3 |
PT <mailshield.gg@mailnull.com> writes:
> On Mon, 18 Apr 2005 18:26:12 +0200, rgb <rbielaws@i1.net> wrote:
> >
> > So you are looking to do this?
> >
> > (defmacro bind-second (first &rest others)
> > `(lambda (x) (,first x ,@others)))
> >
> > (remove-if (bind-second > 2)
> > '(1 2 3 4))
> >
> > I'd think that would make the code a bit more confusing to read.
> > But maybe it's just me.
>
> In very simple cases it might be simpler than writing those lambda
> functions. STL introduced functional programming paradigms in C++,
> that's why I thought there is a standard way in Lisp to do it and the
> STL developers simply implemented the same function binders in C++.
Well, what is clear and recognized by all lisp programmer is:
(remove-if (lambda (x) (< 2 x)) '(1 2 3 4)) --> (1 2)
Also there's this notion of currying.
http://www.cs.oberlin.edu/classes/dragn/labs/combinators/combinators11.html
In Common Lisp you'd write:
(defun curry (f) (lambda (x) (lambda (y) (funcall f x y))))
(funcall (funcall (curry '+) 2) 3) --> 5
(remove-if (funcall (curry '<) 2) '(1 2 3 4)) --> (1 2)
It's nicer in scheme. It doesn't work in emacs lisp.
Despite the awkwardness of the notation in Common Lisp, it migh be
better recognized than bind-second...
> I know I can write my own macros to do that, but a standardized way
> would be better, because it would be recognized by other Lisp
> programmers too. From your answer it's clear there are no such
> standard macros in (e)lisp, so it's not really worth the trouble,
> because it would only make my programs harder to read for others.
--
__Pascal Bourguignon__ http://www.informatimago.com/
Grace personified,
I leap into the window.
I meant to do that.