all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Pascal Bourguignon <spam@mouse-potato.com>
Subject: Re: Function binders in Elisp?
Date: 19 Apr 2005 00:45:57 +0200	[thread overview]
Message-ID: <87mzrv66vu.fsf@thalassa.informatimago.com> (raw)
In-Reply-To: op.spfw0rwep52o26@home-ca12fabbc0

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.

      parent reply	other threads:[~2005-04-18 22:45 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-04-17 17:47 Function binders in Elisp? PT
2005-04-18 16:26 ` rgb
2005-04-18 18:15   ` PT
2005-04-18 20:20     ` Thien-Thi Nguyen
2005-04-18 22:45     ` Pascal Bourguignon [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87mzrv66vu.fsf@thalassa.informatimago.com \
    --to=spam@mouse-potato.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.