From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Schulte Subject: Re: Elisp programming style Date: Fri, 28 Oct 2011 08:40:29 -0600 Message-ID: <877h3puqle.fsf@gmail.com> References: <86obx2gvmd.fsf@googlemail.com> <8762j94dz0.fsf@gmail.com> <86obx1qkcc.fsf@googlemail.com> <87fwiddw1l.fsf@thinkpad.tsdh.de> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([140.186.70.92]:53727) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RJnbo-00039H-HA for emacs-orgmode@gnu.org; Fri, 28 Oct 2011 10:40:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RJnbm-00074s-QH for emacs-orgmode@gnu.org; Fri, 28 Oct 2011 10:40:36 -0400 Received: from mail-vw0-f41.google.com ([209.85.212.41]:62570) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RJnbm-00074g-Mx for emacs-orgmode@gnu.org; Fri, 28 Oct 2011 10:40:34 -0400 Received: by vws16 with SMTP id 16so4226115vws.0 for ; Fri, 28 Oct 2011 07:40:34 -0700 (PDT) In-Reply-To: <87fwiddw1l.fsf@thinkpad.tsdh.de> (Tassilo Horn's message of "Fri, 28 Oct 2011 16:34:46 +0200") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Tassilo Horn Cc: emacs-orgmode@gnu.org Tassilo Horn writes: > Thorsten writes: > >>> Too bad you didn't give any concrete examples. >> >> The problem can be described easily: >> >> problem-specific helper-funcions (some redundancy avoided) >> ,----------------------------------------------------------- >> | (defun main-function (args) >> | (let ((var (assoc :key1 args))) ; extracting var once >> | ... >> | (helper-function1 ...) ; inside let using var >> | (helper-function2 ...) ; inside let using var >> | )) >> | >> | (defun helper-function1 () >> | ... >> | ) >> | >> | (defun helper-function2 () >> | ... >> | ) >> `----------------------------------------------------------- >> >> vs >> >> standalone helper-functions (but redundancy) >> ,------------------------------------------------------------- >> | (defun main-function (args) >> | (let ((value (assoc :key1 args)) ; extracting var 1st time >> | ... >> | ) >> | (helper-function1 ...) ; outside let >> | (helper-function2 ...) ; outside let >> | ) >> | >> | (defun helper-function1 (args) >> | (let ((var (assoc :key1 args))) ; extracting var 2nd time >> | ... >> | )) >> | >> | (defun helper-function2 (args) >> | (let ((var (assoc :key1 args))) ; extracting var 3rd time >> | ... >> | )) >> `------------------------------------------------------------- > > That's still very vague. If `args' is some structure that has some > meaning and its parts belong together, say, an org entry, then it makes > sense to have the helper functions defined on that structure in order to > provide a consistent interface throughout the library. And I wouldn't > tell multiple similar let-bindings duplicate code. > To clarify my earlier reply, I would agree with Tassilo above. If args is a global variable (declared with defvar or defconst) then using it without accepting it as an argument is not a problem (and the emacs-lisp compiler will not complain). Best -- Eric -- Eric Schulte http://cs.unm.edu/~eschulte/