<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#ffffff">
FWIW, several years ago, I implemented a wrapper for "#%app" that
supported this, as an exercise and without actually using it, but I
kept it in mind.<br>
<br>
I use multiple-values a lot, including in named-"let" recursion, and,
since that multiple-value-splicing "#%app" exercise, I have noticed
times when it would have been a win.  But I have also noticed at least
as many times when I had a coding error that multiple-value-splicing
would've obscured.  I intuitively think it would be bad for
readability, but I don't have even anecdotal data for that.<br>
<br>
Of course, people with other coding styles or different kinds of
programs would put different weights on the pros and cons.  Do you
think people would be happy with an "app" macro that they'd use only
when then wanted to so an apply with multiple-values splicing?  It's
easy to implement in an inefficient way (below is such an inefficient
implementation I made for a blog post a long time ago):<br>
<br>
(define-syntax app<br>
 (syntax-rules ()<br>
   ((_ PROC)         (PROC))<br>
   ((_ PROC ARG ...) (%app:1 (ARG ...) () (PROC)))))<br>
<br>
(define-syntax %app:1<br>
 (syntax-rules ()<br>
   ((_ () (BIND ...) (PROC VAR ...))<br>
    (let (BIND ...)<br>
      (apply PROC (append VAR ...))))<br>
   ((_ (ARG0 ARG1 ...) (BIND ...) (PROC VAR ...))<br>
    (%app:1 (ARG1 ...)<br>
            (BIND ... (actual (call-with-values (lambda () ARG0) list)))<br>
            (PROC VAR ... actual)))))<br>
<br>
(app vector 1 (values 2 3) 4 (list 5) (values 6 7))<br>
;;==&gt; #(1 2 3 4 (5) 6 7)<br>
<br>
I haven't really needed such a macro myself so far.  Before I'd want
that macro, I would want things like multiple-value support in "let".<br>
<br>
Neil V.<br>
<br>
Laurent wrote at 07/11/2013 08:56 AM:
<blockquote
 cite="mid:CABNTSaG3NKH=qn164R7sibnryk656YdpaG+zu-zQvgpbkGyYEw@mail.gmail.com"
 type="cite">
  <div dir="ltr">
  <div>
  <div>
  <div>
  <div>
  <div>In some postfix languages, if a procedure returns multiple
values, these values can be used directly as multiple arguments to
another procedure call, i.e., they are "spliced" in the latter call.<br>
  </div>
In an extended Racket, this would look like this:<br>
  </div>
  <br>
(+ (values 1 2) (values 3 4)) <br>
  </div>
  <div>would be equivalent to <br>
(+ 1 2 3 4)<br>
  <br>
  </div>
(map values '(0 1 2) '(a b c))<br>
  <div>would return<br>
  </div>
  <div>'(0 a 1 b 2 c)<br>
  <br>
  </div>
  <div>(call-with-values (lambda()(my-proc ....)) list)<br>
would simply be <br>
  </div>
  <div>(list (my-proc ....))<br>
  <br>
  </div>
  <div>(values (values 1 2) (values 'a 'b))<br>
  </div>
  <div>would be equivalent to <br>
  </div>
  <div>(values 1 2 'a 'b)<br>
  <br>
Correct me if I'm wrong, but I think all the cases where this feature
should be useful currently throws an error, so it would probably break
only very little.<br>
  </div>
  <div><br>
  </div>
Such a missing feature tickles me from time to time, and I often find
that Racket `values' system is too cumbersome to be used more often,
i.e., you need to go through stages of `call-with-values',
'let/define-values', `(apply values ....)', etc. and I often find
myself not wanting to go down this road.<br>
  <br>
  </div>
  <div>IMO, `values' is *meant* to be the way I describe above:
`values' is exactly like `list', except than instead of encapsulating
the values in a container, it splices them in-place.</div>
  <br>
  <div>Do you see some disadvantages of using values this way?<br>
  </div>
  <div>For example, in some occasions, for things like<br>
  </div>
  <div>(define (foo x) (values x x))<br>
  </div>
  <div>(map + (foo '(1 2 3)))<br>
  </div>
  <div>it may be more difficult to infer that there are actually 2
lists in the map, but to me it's just a matter of
style/taste/comments/documentation, not a matter of feature.<br>
  <br>
  </div>
  </div>
Laurent<br>
  </div>
  <pre wrap="">
<fieldset class="mimeAttachmentHeader"></fieldset>
____________________
  Racket Users list:
  <a class="moz-txt-link-freetext" href="http://lists.racket-lang.org/users">http://lists.racket-lang.org/users</a>
  </pre>
</blockquote>
</body>
</html>