On Mon, Dec 09, 2024 at 01:54:47PM +0000, Stefan Schmiedl wrote:
------ Original Message ------
> From tomas@tuxteam.de
To guile-user@gnu.org
Date 09.12.2024 12:42:22
Subject Re: sorted?
> On Mon, Dec 09, 2024 at 11:37:33AM +0000, Ricardo G. Herdt wrote:
> > Hi Jeremy,
> >
> > Am 09.12.2024 11:21 schrieb Jeremy Korwin-Zmijowski:
> > > The reference says :
> > >
> > > Scheme Procedure: *sorted?* items less
> > > C Function: *scm_sorted_p* (items, less)
> > >
> > > Return |#t| if items is a list or vector such that, for each
> > > element x and the next element y of items, |(less y x)| returns
> > > |#f|. Otherwise return |#f|.
> > >
> > > I think the description should be :
> > >
> > > Return |#t| if items is a list or vector such that, for each element
> > > x and the next element y of items, |(less y x)| returns |#t|.
> > > Otherwise return |#f|.
> >
> > Actually no, since less is applied to y and x in that order. This way
> > (sorted? '(1 1) <) correctly returns #t as your experiments show.
>
> I don't get it. (< 1 1) is /always/ #f, regardless of the order of the
> ones?
>
> I'm as confused as Jeremy is.
>
I understand the reference text as "Return #t if the list is _not
unsorted_".
Since (< 1 1) returns #f, '(1 1) is _not unsorted_ and all is well.
This seems the intention. But since it accepts an arbitrary "less"
function, it ends being iffy. How do you go from some "less" to a
"less-or-equal" without running into undecidability dark alleys?