The code of natord.zig is a direct translation of https://github.com/sourcefrog/natsort C implementation. To preserve C string handling, Zig implementation injects 0 when reaches end of string. That may be improved to use .len.
Actually, I've also created a Zig package https://codeberg.org/knightpp/natural-ordering-zig, but decided to just copy the code here. If you'd like to make a dependency on my project instead, let me know.
Before
$ ll chapter3/
-rw-r--r-- user user 1.7 KB 21 May 12:43 digital-circuits.scm
-rw-r--r-- user user 2.5 KB 21 May 12:43 doubly-list.scm
-rw-r--r-- user user 223 B 21 May 12:43 exercise3_1.scm
-rw-r--r-- user user 683 B 21 May 12:43 exercise3_10.scm
-rw-r--r-- user user 399 B 21 May 12:43 exercise3_11.scm
-rw-r--r-- user user 147 B 21 May 12:43 exercise3_12.scm
-rw-r--r-- user user 263 B 21 May 12:43 exercise3_13.scm
-rw-r--r-- user user 292 B 21 May 12:43 exercise3_14.scm
-rw-r--r-- user user 189 B 21 May 12:43 exercise3_15.scm
-rw-r--r-- user user 350 B 21 May 12:43 exercise3_16.scm
-rw-r--r-- user user 530 B 21 May 12:43 exercise3_17.scm
-rw-r--r-- user user 341 B 21 May 12:43 exercise3_18.scm
-rw-r--r-- user user 636 B 21 May 12:43 exercise3_19.scm
-rw-r--r-- user user 460 B 21 May 12:43 exercise3_2.scm
-rw-r--r-- user user 742 B 21 May 12:43 exercise3_20.scm
-rw-r--r-- user user 427 B 21 May 12:43 exercise3_21.scm
-rw-r--r-- user user 1.1 KB 21 May 12:43 exercise3_22.scm
-rw-r--r-- user user 481 B 21 May 12:43 exercise3_23.scm
-rw-r--r-- user user 1.5 KB 21 May 12:43 exercise3_24.scm
-rw-r--r-- user user 1.3 KB 21 May 12:43 exercise3_25.scm
-rw-r--r-- user user 670 B 21 May 12:43 exercise3_26.scm
-rw-r--r-- user user 814 B 21 May 12:43 exercise3_27.scm
-rw-r--r-- user user 481 B 21 May 12:43 exercise3_28.scm
-rw-r--r-- user user 342 B 21 May 12:43 exercise3_29.scm
-rw-r--r-- user user 455 B 21 May 12:43 exercise3_3.scm
-rw-r--r-- user user 1.1 KB 21 May 12:43 exercise3_30.scm
-rw-r--r-- user user 869 B 21 May 12:43 exercise3_4.scm
-rw-r--r-- user user 971 B 21 May 12:43 exercise3_5.scm
-rw-r--r-- user user 571 B 21 May 12:43 exercise3_6.scm
-rw-r--r-- user user 754 B 21 May 12:43 exercise3_7.scm
-rw-r--r-- user user 157 B 21 May 12:43 exercise3_8.scm
-rw-r--r-- user user 383 B 21 May 12:43 exercise3_9.scm
-rw-r--r-- user user 1.0 KB 21 May 12:43 queue.scm
After
$ ~/src/forks/lsr/zig-out/bin/lsr -l chapter3/
-rw-r--r-- user user 1.7 KB 21 May 12:43 digital-circuits.scm
-rw-r--r-- user user 2.5 KB 21 May 12:43 doubly-list.scm
-rw-r--r-- user user 223 B 21 May 12:43 exercise3_1.scm
-rw-r--r-- user user 460 B 21 May 12:43 exercise3_2.scm
-rw-r--r-- user user 455 B 21 May 12:43 exercise3_3.scm
-rw-r--r-- user user 869 B 21 May 12:43 exercise3_4.scm
-rw-r--r-- user user 971 B 21 May 12:43 exercise3_5.scm
-rw-r--r-- user user 571 B 21 May 12:43 exercise3_6.scm
-rw-r--r-- user user 754 B 21 May 12:43 exercise3_7.scm
-rw-r--r-- user user 157 B 21 May 12:43 exercise3_8.scm
-rw-r--r-- user user 383 B 21 May 12:43 exercise3_9.scm
-rw-r--r-- user user 683 B 21 May 12:43 exercise3_10.scm
-rw-r--r-- user user 399 B 21 May 12:43 exercise3_11.scm
-rw-r--r-- user user 147 B 21 May 12:43 exercise3_12.scm
-rw-r--r-- user user 263 B 21 May 12:43 exercise3_13.scm
-rw-r--r-- user user 292 B 21 May 12:43 exercise3_14.scm
-rw-r--r-- user user 189 B 21 May 12:43 exercise3_15.scm
-rw-r--r-- user user 350 B 21 May 12:43 exercise3_16.scm
-rw-r--r-- user user 530 B 21 May 12:43 exercise3_17.scm
-rw-r--r-- user user 341 B 21 May 12:43 exercise3_18.scm
-rw-r--r-- user user 636 B 21 May 12:43 exercise3_19.scm
-rw-r--r-- user user 742 B 21 May 12:43 exercise3_20.scm
-rw-r--r-- user user 427 B 21 May 12:43 exercise3_21.scm
-rw-r--r-- user user 1.1 KB 21 May 12:43 exercise3_22.scm
-rw-r--r-- user user 481 B 21 May 12:43 exercise3_23.scm
-rw-r--r-- user user 1.5 KB 21 May 12:43 exercise3_24.scm
-rw-r--r-- user user 1.3 KB 21 May 12:43 exercise3_25.scm
-rw-r--r-- user user 670 B 21 May 12:43 exercise3_26.scm
-rw-r--r-- user user 814 B 21 May 12:43 exercise3_27.scm
-rw-r--r-- user user 481 B 21 May 12:43 exercise3_28.scm
-rw-r--r-- user user 342 B 21 May 12:43 exercise3_29.scm
-rw-r--r-- user user 1.1 KB 21 May 12:43 exercise3_30.scm
-rw-r--r-- user user 1.0 KB 21 May 12:43 queue.scm
This is awesome! The only concern I had was that this would reduce perf a little bit, but it is consistently about 5% faster than the previous sorting.