Elements disappear when the `sort!` `List in Guile

It seems that I have a case of elements disappearing after a call sort!in the list of lines:

(I got this code from the Autogen template I was working on.)

(use-modules (ice-9 pretty-print))

(let ((files '("log4cplus/socketappender.h"
              "log4cplus/qt4debugappender.h"
              "log4cplus/nteventlogappender.h"
              "log4cplus/ndc.h"
              "log4cplus/msttsappender.h"
              "log4cplus/mdc.h"
              "log4cplus/loglevel.h"
              "log4cplus/loggingmacros.h"
              "log4cplus/logger.h"
              "log4cplus/log4judpappender.h"
              "log4cplus/log4cplus.h"
              "log4cplus/layout.h"
              "log4cplus/hierarchylocker.h"
              "log4cplus/hierarchy.h"
              "log4cplus/fstreams.h"
              "log4cplus/clogger.h"
              "log4cplus/asyncappender.h"
              "log4cplus/version.h"
              "log4cplus/tstring.h"
              "log4cplus/qt5debugappender.h"
              "log4cplus/nullappender.h"
              "log4cplus/fileappender.h"
              "log4cplus/consoleappender.h"
              "log4cplus/clfsappender.h"
              "log4cplus/appender.h"
              "log4cplus/win32debugappender.h"
              "log4cplus/win32consoleappender.h"
              "log4cplus/tracelogger.h"
              "log4cplus/tchar.h"
              "log4cplus/syslogappender.h"
              "log4cplus/initializer.h"
              "log4cplus/configurator.h"
              "log4cplus/config.hxx"
              "log4cplus/thread/threads.h"
              "log4cplus/thread/syncprims.h"
              "log4cplus/thread/syncprims-pub-impl.h"
              "log4cplus/thread/impl/tls.h"
              "log4cplus/thread/impl/threads-impl.h"
              "log4cplus/thread/impl/syncprims-pmsm.h"
              "log4cplus/thread/impl/syncprims-impl.h"
              "log4cplus/thread/impl/syncprims-cxx11.h"
              "log4cplus/spi/rootlogger.h"
              "log4cplus/spi/objectregistry.h"
              "log4cplus/spi/loggingevent.h"
              "log4cplus/spi/loggerimpl.h"
              "log4cplus/spi/loggerfactory.h"
              "log4cplus/spi/filter.h"
              "log4cplus/spi/factory.h"
              "log4cplus/spi/appenderattachable.h"
              "log4cplus/streams.h"
              "log4cplus/internal/socket.h"
              "log4cplus/internal/internal.h"
              "log4cplus/internal/env.h"
              "log4cplus/internal/cygwin-win32.h"
              "log4cplus/helpers/thread-config.h"
              "log4cplus/helpers/socket.h"
              "log4cplus/helpers/pointer.h"
              "log4cplus/helpers/lockfile.h"
              "log4cplus/helpers/connectorthread.h"
              "log4cplus/helpers/timehelper.h"
              "log4cplus/helpers/stringhelper.h"
              "log4cplus/helpers/socketbuffer.h"
              "log4cplus/helpers/snprintf.h"
              "log4cplus/helpers/queue.h"
              "log4cplus/helpers/property.h"
              "log4cplus/helpers/loglog.h"
              "log4cplus/helpers/fileinfo.h"
              "log4cplus/helpers/appenderattachableimpl.h"
              "log4cplus/config/windowsh-inc.h"
              "log4cplus/config/win32.h"
              "log4cplus/config/macosx.h"
              "log4cplus/boost/deviceappender.hxx")))
  (begin
    ;; Add the generated header as it will not be found by file search.
    (append! files (list "log4cplus/config/defines.hxx"))
    (display "before sort:\n")
    (pretty-print files)
    (sort! files string<?)
    (display "after sort:\n")
    (pretty-print files)))

The result that I see is as follows:

before sort:
("log4cplus/socketappender.h"
 "log4cplus/qt4debugappender.h"
 "log4cplus/nteventlogappender.h"
 "log4cplus/ndc.h"
 "log4cplus/msttsappender.h"
 "log4cplus/mdc.h"
 "log4cplus/loglevel.h"
 "log4cplus/loggingmacros.h"
 "log4cplus/logger.h"
 "log4cplus/log4judpappender.h"
 "log4cplus/log4cplus.h"
 "log4cplus/layout.h"
 "log4cplus/hierarchylocker.h"
 "log4cplus/hierarchy.h"
 "log4cplus/fstreams.h"
 "log4cplus/clogger.h"
 "log4cplus/asyncappender.h"
 "log4cplus/version.h"
 "log4cplus/tstring.h"
 "log4cplus/qt5debugappender.h"
 "log4cplus/nullappender.h"
 "log4cplus/fileappender.h"
 "log4cplus/consoleappender.h"
 "log4cplus/clfsappender.h"
 "log4cplus/appender.h"
 "log4cplus/win32debugappender.h"
 "log4cplus/win32consoleappender.h"
 "log4cplus/tracelogger.h"
 "log4cplus/tchar.h"
 "log4cplus/syslogappender.h"
 "log4cplus/initializer.h"
 "log4cplus/configurator.h"
 "log4cplus/config.hxx"
 "log4cplus/thread/threads.h"
 "log4cplus/thread/syncprims.h"
 "log4cplus/thread/syncprims-pub-impl.h"
 "log4cplus/thread/impl/tls.h"
 "log4cplus/thread/impl/threads-impl.h"
 "log4cplus/thread/impl/syncprims-pmsm.h"
 "log4cplus/thread/impl/syncprims-impl.h"
 "log4cplus/thread/impl/syncprims-cxx11.h"
 "log4cplus/spi/rootlogger.h"
 "log4cplus/spi/objectregistry.h"
 "log4cplus/spi/loggingevent.h"
 "log4cplus/spi/loggerimpl.h"
 "log4cplus/spi/loggerfactory.h"
 "log4cplus/spi/filter.h"
 "log4cplus/spi/factory.h"
 "log4cplus/spi/appenderattachable.h"
 "log4cplus/streams.h"
 "log4cplus/internal/socket.h"
 "log4cplus/internal/internal.h"
 "log4cplus/internal/env.h"
 "log4cplus/internal/cygwin-win32.h"
 "log4cplus/helpers/thread-config.h"
 "log4cplus/helpers/socket.h"
 "log4cplus/helpers/pointer.h"
 "log4cplus/helpers/lockfile.h"
 "log4cplus/helpers/connectorthread.h"
 "log4cplus/helpers/timehelper.h"
 "log4cplus/helpers/stringhelper.h"
 "log4cplus/helpers/socketbuffer.h"
 "log4cplus/helpers/snprintf.h"
 "log4cplus/helpers/queue.h"
 "log4cplus/helpers/property.h"
 "log4cplus/helpers/loglog.h"
 "log4cplus/helpers/fileinfo.h"
 "log4cplus/helpers/appenderattachableimpl.h"
 "log4cplus/config/windowsh-inc.h"
 "log4cplus/config/win32.h"
 "log4cplus/config/macosx.h"
 "log4cplus/boost/deviceappender.hxx"
 "log4cplus/config/defines.hxx")
after sort:
("log4cplus/qt4debugappender.h"
 "log4cplus/qt5debugappender.h"
 "log4cplus/socketappender.h"
 "log4cplus/spi/appenderattachable.h"
 "log4cplus/spi/factory.h"
 "log4cplus/spi/filter.h"
 "log4cplus/spi/loggerfactory.h"
 "log4cplus/spi/loggerimpl.h"
 "log4cplus/spi/loggingevent.h"
 "log4cplus/spi/objectregistry.h"
 "log4cplus/spi/rootlogger.h"
 "log4cplus/streams.h"
 "log4cplus/syslogappender.h"
 "log4cplus/tchar.h"
 "log4cplus/thread/impl/syncprims-cxx11.h"
 "log4cplus/thread/impl/syncprims-impl.h"
 "log4cplus/thread/impl/syncprims-pmsm.h"
 "log4cplus/thread/impl/threads-impl.h"
 "log4cplus/thread/impl/tls.h"
 "log4cplus/thread/syncprims-pub-impl.h"
 "log4cplus/thread/syncprims.h"
 "log4cplus/thread/threads.h"
 "log4cplus/tracelogger.h"
 "log4cplus/tstring.h"
 "log4cplus/version.h"
 "log4cplus/win32consoleappender.h"
 "log4cplus/win32debugappender.h")

As you can see, half of the items are missing in the sort list.

What am I doing wrong in the schema source?

UPDATE

So, through trial and error, I came across what seems like a fix. When I change (sort! files string-ci<?)to (set! files (sort! files string<?)), I get the desired result. But I am confused why it does not work on the spot, as I expect.

+4
source share
1 answer
+3

All Articles