<div>Very nice. Thank you.</div>
<div>-pp</div>
<div>&nbsp;</div>
<div><br>&nbsp;</div>
<div><span class="gmail_quote">On 1/23/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 use the more complex combinators to express that. Here's<br>how -&gt;r can be used to express map's contract:
<br><br>(module map-c mzscheme<br>(require (lib &quot;contract.ss&quot;))<br><br>(define map-c map)<br><br>(provide/contract<br>&nbsp;&nbsp;[map-c<br>&nbsp;&nbsp; (-&gt;r ([func<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and/c<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; procedure?<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (let ([arity-matches-lists
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(ë (f)<br>&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 rest-args))))])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arity-matches-lists))]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [lst-one (listof any/c)])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rest-args<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and/c (listof (listof any/c))
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (let ([same-length-lists (ë (x) (apply equal? (length lst-one) (map length x)))])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; same-length-lists))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(listof any/c))]))<br><br>(require map-c)<br><br>(define (print-msg exn)
<br>(display (exn-message exn))<br>(newline))<br><br>(map-c (lambda (x y) x) (list 1 2 3) (list 4 5 6))<br>(with-handlers ([values print-msg])<br>(map-c (lambda (x) x) (list 1 2 3) (list 4 5 6)))<br>(with-handlers ([values print-msg])
<br>(map-c (lambda (x y) x) (list 1 2 3) (list 4 5 6 7)))<br><br>At Mon, 23 Jan 2006 19:49:34 +0000, pedro pinto wrote:<br>&gt; Hi there,<br>&gt;<br>&gt; I just started fumbling around with contracts and I was trying to write a
<br>&gt; contract for a function similar to map:<br>&gt;<br>&gt; map proc clist1 clist2 ... -&gt; list<br>&gt;<br>&gt; Is there a way to say that proc is a procedure whose arity should match the<br>&gt; number of clist arguments?
<br>&gt;<br>&gt; TIA,<br>&gt; -pp<br>&gt; _________________________________________________<br>&gt;&nbsp;&nbsp; For list-related administrative tasks:<br>&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></blockquote></div><br>