bug#72347: Mismatch between documentation and real implementation of list-index
Tomas Volf <[email protected]>
| Newsgroups | gmane.lisp.guile.bugs |
|---|---|
| Message-ID | <ZqdusIZbWvs6NeH2@ws> |
Hello,
On 2024-07-29 00:34:14 +0000, Marius via Bug reports for GUILE, GNU's Ubiquitous Extension Language wrote:
> Good evening,
>
> I don't know if this is actually a Guile bug or a documentation bug, but I'm currently learning Guile from the "Guile reference manual" and I've found a mismatch between what the documentation says and what "my" guile does. I use Guile 3.0.9.
>
> In my Guile instance (from what I can deduce), last-index is a procedure that returns the index of the first element of a list that matches with a s-expresion.
>
> For example:
>
> (list-index '(1 2 3) 3) -> 2
> (list-index '(height width) 'width) -> 1
>
> But the documentation says otherwise (<https://www.gnu.org/software/guile//manual/guile.html#SRFI_002d1-Filtering-and-Partitioning>):
>
> list-index pred lst1 lst2 ...
>
> Returns the index of the first set of elements, one from each of lst1 lst2 ..., which satisfies pred.
This is documentation for SRFI-1, and that is not available by default (at least
not fully), you need to (use-modules) it. See below.
>
>
> If I try to run list-index examples (from the documentation) I get an error because it doesn't know how to deal with a procedure as the first argument.
>
>
> I'm missing something? I understand that list-index it's defined in SRFI-1 and maybe a Guile definition is shadowing the SRFI-1 definition. But where is the Guile documentation for this shadowing list-index? In the Guile Reference Manual list-index it's only described inside SRFI-1 module.
It seems that Guile provides 2 different list-index procedures. One defined in
the ice-9/boot-9.scm, and one in the srfi-1 module. By default the boot-9's one
is available.
$ guile -q
GNU Guile 3.0.9
Copyright (C) 1995-2023 Free Software Foundation, Inc.
Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it
under certain conditions; type `,show c' for details.
Enter `,help' for help.
scheme@(guile-user)> list-index
$1 = #<procedure list-index (l k)>
scheme@(guile-user)> ,use (srfi srfi-1)
scheme@(guile-user)> list-index
$2 = #<procedure list-index (pred clist1 . rest)>
Notice that by importing srfi-1 the list-index changes to the documented one.
You are right that the "default" list-index indeed does not seem to be
documented. It also uses `eq?' for comparisons and does not allow changing
that.
I hope this sheds some light on the problem.
Tomas
--
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.
signature.asc
(application/pgp-signature, 833 B)
-----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEt4NJs4wUfTYpiGikL7/ufbZ/wakFAmanbrAACgkQL7/ufbZ/ wakj7RAAkiu1XLillP0+NAJQ4tBVUErWI/zTs9O1ohZ0fl4l8oQK8lRGWkSLeaSn PWnQFYfnFJpmbp/HCd+DE2bgxLWLm8gw0B6PtP9UUv9Vzx+j335inSIF3658SM7o 8KDxh3Wv1WhbQSDGanerOp5YqLoJ8owiOqXvQ3Fz6lNF2y7uvBt7EdL2FCzlVkID w6SoKOd6FdUwU2GgLHpvEoUy/C1rRBQlDm8lU8fk95KL/Y5r7X7eLWc10uscp1Qr mH6dMT12NhmrZurepyBkjmLPEI+rnuBupchbCzZV+MfwQbL1qdmIx8jlNa8fCgeT 0wMs8ebI2DoMgvwRngpyuLIeX5P6DjDoQJNPmvQtXcKA6sosY8cSZI/4/GiBfo5x 4rmUhUAvdCLOilWeLtZ20a82TcOhYJ1PBMRdtkfIPzsUfOJjkTHbUR42wC+ieRr5 oUAraJxpStXvLCewJ6+Sak+uMxLZ/sxzROMhGhiu/tgmBQ3rWCfK9zPCDnqNRVOW /E2458ip+mombAbHAzFPzI1zceX/sn2IP6lMnx/zqiIPLP+wGPgY6HadermJnr/y RbyYggKpdHviPfRuZ9Zy6kuMb4MRkaA8VsDRBrPk1cXgETBzsKZDG9UjZjaFE/hE nH6yYmX+JIsTjLjtk4rH6WVg2FJPeWeySnVh+rk3gWPM8kX/QMg= =Wj++ -----END PGP SIGNATURE-----