On Mon, Dec 9, 2024 at 1:58 PM Mikael Djurfeldt <mik...@djurfeldt.com> wrote:
> On Mon, Dec 9, 2024 at 1:37 PM <to...@tuxteam.de> wrote: > >> On Mon, Dec 09, 2024 at 01:20:48PM +0100, Mikael Djurfeldt wrote: >> > On Mon, Dec 9, 2024 at 12:43 PM <to...@tuxteam.de> wrote: >> > >> > > 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. >> > > >> > >> > sorted? checks whether *a list* has its elements sorted. It does not >> apply >> > a predicate to all successive pairs like some fold operation. Two >> > consecutive equal elements are in sorted order since it wouldn't matter >> if >> > you switched them. The less operation is used to sort the list (or check >> > it). >> >> Thanks for your explanation. I must admit that I'm still confused. Perhaps >> I'll have to have a look at the implementation. >> >> I'm sometimes slow :-) >> > > No problem---I'm too. > > Think about it this way: > > How would you sort this list of numbers: 7 1 3 8 2 1 4 ? > > It's 1 1 2 3 4 7 8, right? That is what we want (sort '(7 1 3 8 2 1 4)) to > output (+ the parentheses of course). > > Now, `sorted?' returns true if its input is what `sort' would have > produced as output, otherwise false. > > Don't confused by the "less" that you pass in as second argument to `sort'. That is something you are *required* to pass to sort for it to function as expected. It is something that `sort' uses.