<div>Sorry I was not clear.&nbsp; I want to specify a function like map, where the arity of the mapping function argument is dependent on the rest of the arguments to map. Your solution does that. But&nbsp;I also want to specify the return type of the mapping function. I did not see a way to describe the mapping function return type&nbsp;that does not also restrict the way I can describe its arguments.
</div>
<div>&nbsp;</div>
<div>More concretly, consider:</div>
<div>
<p>(define (build/join-strings mapping-f separator . lsts)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (foldl (lambda (st so-far)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (format &quot;~a~a~a&quot;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; so-far<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (equal? so-far &quot;&quot;)
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;&quot;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; separator)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; st))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;&quot;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (apply map (cons&nbsp;mapping-f lsts)))))</p>
<p>I want to state that mapping-f has the same arity has the rest arguments to build/join-strings which your solution does, but I also want to say that mapping-f must return a string.</p>
<p>-pp</p>
<p>&nbsp;</p></div>
<div>&nbsp;</div>
<div><br><br>&nbsp;</div>
<div><span class="gmail_quote">On 1/24/06, <b class="gmail_sendername">Robby Findler</b> &lt;<a href="mailto:robby@cs.uchicago.edu">robby@cs.uchicago.edu</a>&gt; wrote:</span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">You have to pin down the arity enough that users of your function know<br>what the legal argument lengths are. (Is that what you're asking?)
<br><br>Robby<br><br>At Mon, 23 Jan 2006 23:58:08 +0000, pedro pinto wrote:<br>&gt;&nbsp;&nbsp;One more question, how would I go about saying something about the return<br>&gt; type of proc/func? From my understanding of the docs I need to write a
<br>&gt; function contract, as opposed to what I think is a flat-contract like<br>&gt; arity-matches-lists, but I did not see a way to write one that does not also<br>&gt; pin down the arity.<br>&gt;<br>&gt; -pp<br>&gt;<br>
&gt;<br>&gt;<br>&gt; &gt;&nbsp;&nbsp;On 1/23/06, Robby Findler &lt;<a href="mailto:robby@cs.uchicago.edu">robby@cs.uchicago.edu</a>&gt; wrote:<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; You have to use the more complex combinators to express that. Here's
<br>&gt; &gt; &gt; how -&gt;r can be used to express map's contract:<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; (module map-c mzscheme<br>&gt; &gt; &gt; (require (lib &quot;contract.ss&quot;))<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; (define map-c map)
<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; (provide/contract<br>&gt; &gt; &gt;&nbsp;&nbsp; [map-c<br>&gt; &gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;(-&gt;r ([func<br>&gt; &gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (and/c<br>&gt; &gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procedure?<br>&gt; &gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let ([arity-matches-lists
<br>&gt; &gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( (f)<br>&gt; &gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (procedure-arity-includes? f (+ 1 (length<br>&gt; &gt; &gt; rest-args))))])<br>&gt; &gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arity-matches-lists))]<br>&gt; &gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[lst-one (listof any/c)])
<br>&gt; &gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rest-args<br>&gt; &gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (and/c (listof (listof any/c))<br>&gt; &gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let ([same-length-lists ( (x) (apply equal? (length<br>&gt; &gt; &gt; lst-one) (map length x)))])
<br>&gt; &gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;same-length-lists))<br>&gt; &gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (listof any/c))]))<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; (require map-c)<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; (define (print-msg exn)<br>&gt; &gt; &gt; (display (exn-message exn))
<br>&gt; &gt; &gt; (newline))<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; (map-c (lambda (x y) x) (list 1 2 3) (list 4 5 6))<br>&gt; &gt; &gt; (with-handlers ([values print-msg])<br>&gt; &gt; &gt; (map-c (lambda (x) x) (list 1 2 3) (list 4 5 6)))
<br>&gt; &gt; &gt; (with-handlers ([values print-msg])<br>&gt; &gt; &gt; (map-c (lambda (x y) x) (list 1 2 3) (list 4 5 6 7)))<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; At Mon, 23 Jan 2006 19:49:34 +0000, pedro pinto wrote:<br>
&gt; &gt; &gt; &gt; Hi there,<br>&gt; &gt; &gt; &gt;<br>&gt; &gt; &gt; &gt; I just started fumbling around with contracts and I was trying to<br>&gt; &gt; &gt; write a<br>&gt; &gt; &gt; &gt; contract for a function similar to map:
<br>&gt; &gt; &gt; &gt;<br>&gt; &gt; &gt; &gt; map proc clist1 clist2 ... -&gt; list<br>&gt; &gt; &gt; &gt;<br>&gt; &gt; &gt; &gt; Is there a way to say that proc is a procedure whose arity should<br>&gt; &gt; &gt; match the
<br>&gt; &gt; &gt; &gt; number of clist arguments?<br>&gt; &gt; &gt; &gt;<br>&gt; &gt; &gt; &gt; TIA,<br>&gt; &gt; &gt; &gt; -pp<br>&gt; &gt; &gt; &gt; _________________________________________________<br>&gt; &gt; &gt; &gt;&nbsp;&nbsp; For list-related administrative tasks:
<br>&gt; &gt; &gt; &gt;&nbsp;&nbsp; <a href="http://list.cs.brown.edu/mailman/listinfo/plt-scheme">http://list.cs.brown.edu/mailman/listinfo/plt-scheme</a><br>&gt; &gt; &gt;<br>&gt; &gt;<br>&gt; &gt;<br></blockquote></div><br>