Thank you all, you have given me much to think on here. I had versions that used a generic function as suggested, but I wasn&#39;t sure if the cognitive overhead in understanding the generic strategy outweighed the benefits to concision. I think it probably does in some cases, probably related to how difficult it is to develop a good name for the generic function. However, in this case, I&#39;m on board. Thank you for your time.<br>
<br>-Patrick<br><br><div class="gmail_quote">On 8 May 2012 09:23, Matthias Felleisen <span dir="ltr">&lt;<a href="mailto:matthias@ccs.neu.edu" target="_blank">matthias@ccs.neu.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5"><br>
<br>
On May 7, 2012, at 5:41 PM, Patrick Mahoney wrote:<br>
<br>
&gt; #|<br>
&gt; Hello all, in a quest for greater concision, I&#39;m looking for a way to abstract over the following code containing mostly definitions. Is there an accepted practice for abstraction over definition introduction?|#<br>

&gt;<br>
&gt; (define top-right-x<br>
&gt;   (lambda (a-grid-plane a-cell)<br>
&gt;<br>
&gt; ;;The next three definitions are what I am looking to abstract over, as they show up in many similarly defined functions.|#<br>
&gt;     (match-define (cell row-pos col-pos) a-cell)<br>
&gt;<br>
&gt;     (define cell-size (grid-plane-&gt;cell-size a-grid-plane))<br>
&gt;<br>
&gt;     (match-define (size cell-w cell-h) cell-size)<br>
&gt;<br>
&gt;     (+ cell-w<br>
&gt;        (* col-pos cell-w))))<br>
&gt;<br>
&gt; (define top-right-y<br>
&gt;   (lambda (a-grid-plane a-cell)<br>
&gt;<br>
&gt;     (match-define (cell row-pos col-pos) a-cell)<br>
&gt;<br>
&gt;     (define cell-size (grid-plane-&gt;cell-size a-grid-plane))<br>
&gt;<br>
&gt;     (match-define (size cell-w cell-h) cell-size)<br>
&gt;<br>
&gt;     (* row-pos cell-w)))<br>
&gt;<br>
&gt; #|How should I approach this? are my options parameters, leaving as is, a with- macro?<br>
<br>
<br>
</div></div>1. Define a higher-order function that computes these things:<br>
<br>
(define (vertical-horizontal body)<br>
   (lambda (a-grid-plane a-cell)<br>
      ... defines ...<br>
      (body cell-w col-pos row-pos))) ;; you may need additional parameters<br>
<br>
(define top-right-x (vertical-horizontal (lambda  (cell-w col-pos row-pos) (+ cell-w (* col-pos cell-w)))<br>
...<br>
<br>
That&#39;s the best solution.<br>
<br>
2. Define a macro for the entire function, not just the three auxiliaries. See 1, but perhaps less notation.<br>
<br>
3. If the above is only a hint at how complex your definitions may get, read up on units. Units are modules abstracted over context, i.e., bundles over definitions abstracted over other definitions, possibly mutually recursive.<br>

<span class="HOEnZb"><font color="#888888"><br>
-- Matthias<br>
<br>
</font></span></blockquote></div><br>