unofficial mirror of bug-guile@gnu.org 
 help / color / mirror / Atom feed
* bug#24080: fold-left description in (rnrs lists) section of guile manual incorrect
@ 2016-07-26 20:15 Glenn Michaels
  2016-08-04 20:40 ` Andy Wingo
  0 siblings, 1 reply; 2+ messages in thread
From: Glenn Michaels @ 2016-07-26 20:15 UTC (permalink / raw)
  To: 24080

The section on the (rnrs lists) library in the guile manual contains the following:

Scheme Procedure: fold-left combine nil list1 list2 …
Scheme Procedure: fold-right combine nil list1 list2 …

    These procedures are identical to the fold and fold-right procedures provided by SRFI-1.

In the case of fold-left and SRFI-1 fold, this is not correct; the order in which the arguments are passed to the combine procedure is different. Compare:

(let ((f (lambda (a b) (format #f "(f ~a ~a)" a b))))
  (for-each
   (lambda (fold)
     (display (fold f "0" '(a b c d e)))
     (format #t " ; ~s\n" (procedure-name fold)) )
   (list (@ (rnrs lists) fold-left)
         (@ (rnrs lists) fold-right)    ;same as srfi-1 fold-right
         (@ (srfi srfi-1) fold)
         (@ (srfi srfi-1) fold-right))))

Output:

(f (f (f (f (f 0 a) b) c) d) e) ; fold-left
(f a (f b (f c (f d (f e 0))))) ; fold-right
(f e (f d (f c (f b (f a 0))))) ; fold
(f a (f b (f c (f d (f e 0))))) ; fold-right

In the single-list case, fold-left can be thought of as applying f left-associatively to the elements of the list.
Moreover, in this case (fold f nil l) == (fold-left (lambda (x y) (f y x)) nil l).

(In the case of fold-right, both versions are identical).





^ permalink raw reply	[flat|nested] 2+ messages in thread

* bug#24080: fold-left description in (rnrs lists) section of guile manual incorrect
  2016-07-26 20:15 bug#24080: fold-left description in (rnrs lists) section of guile manual incorrect Glenn Michaels
@ 2016-08-04 20:40 ` Andy Wingo
  0 siblings, 0 replies; 2+ messages in thread
From: Andy Wingo @ 2016-08-04 20:40 UTC (permalink / raw)
  To: Glenn Michaels; +Cc: 24080-done

On Tue 26 Jul 2016 22:15, "Glenn Michaels" <gmichaels@Safe-mail.net> writes:

> The section on the (rnrs lists) library in the guile manual contains the following:
>
> Scheme Procedure: fold-left combine nil list1 list2 …
> Scheme Procedure: fold-right combine nil list1 list2 …
>
>     These procedures are identical to the fold and fold-right procedures provided by SRFI-1.

I believe this was fixed by

  commit 498cd58cb43e0dde024ad3c62983def16a0c7ca9
  Author: Andy Wingo <wingo@pobox.com>
  Date:   Thu Jun 23 21:39:23 2016 +0200

      Fix R6RS fold-left documentation
      
      * doc/ref/r6rs.texi (rnrs lists): Fix documentation of fold-left.

Should be out in 2.1.4.

Cheers,

Andy





^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-08-04 20:40 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-07-26 20:15 bug#24080: fold-left description in (rnrs lists) section of guile manual incorrect Glenn Michaels
2016-08-04 20:40 ` Andy Wingo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).