shithub: sl

Download patch

ref: a001cd030792ca157748a5f50aec1745efe088c2
parent: 26587c241cc7dc6fb0ca74b728b3824b70d870a8
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Sat May 3 22:03:31 EDT 2025

document subseq

--- a/boot/sl.boot
+++ b/boot/sl.boot
@@ -12,40 +12,38 @@
               #fn("n201m:" 6) NIL #fn("z0700}2:" #(vec) 6)
               #fn("z0700}2:" #(aset!) 6) NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL #fn("n3012082>1|:" #(#fn("n1A061:" 6)) 7)
               NIL NIL NIL NIL NIL NIL NIL NIL #fn("z0700}2:" #(aref) 6) NIL NIL)
-            *properties* #table(*formals-list* #table(sym-set-doc ((symbol doc-seq . formals-list))  cddddr ((lst))  append (lists)  map-int ((f
-  count))  macrocall? ((e))  io-eof? ((io))  cadr ((lst))  get-syntax ((sym))  cdadr ((lst))  cadddr ((lst))  macroexpand ((e))  nan? ((v))  caar ((lst))  ptr? ((v))  expt ((x
-  p))  fixnum? ((v))  exit (((status NIL)))  gc (NIL)  caadr ((lst))  caaar ((lst))  div0 ((n₀ n₁))  __finish ((status))  lz-unpack ((data
-  :to destination)
-  (data :size decompressed-bytes))  s32 (((n 0)))  u8 (((n 0)))  defstruct ((name docs… options… (slot-1
-  DEFAULT)
-                                                                                  slot-2 slot-3)
-                                                                            (name (:type 'vec) (:named
-  T)
-                                                                                  (:constructor T)
-                                                                                  (:conc-name T) (:predicate
-  T) . slots))  set-syntax! ((sym f))  caadar ((lst))  log10 ((x))  any ((pred lst))  s8 (((n 0)))  buffer (NIL)  num? ((v))  gensym? ((v))  list-tail ((lst
-  n))  cdddr ((lst))  assoc-list (kvs)  assert ((expr))  builtin? ((v))  set-car! ((cell new-first))  macroexpand-1 ((e))  1+ ((n))  arr? ((v))  cadaar ((lst))  throw ((tag
-  value))  vec (rest)  unwind-protect ((expr finally))  cos ((r))  positive? ((n))  atan ((x))  str (term)  rune (((n
-  65533)))  remprop ((symbol key))  negative? ((n))  void (rest)  cadar ((lst))  assert-fail ((expr . what))  type-error (args)  file ((path
-  (:read NIL) (:write NIL) (:create NIL) (:truncate NIL) (:append NIL)))  every ((pred lst))  1- ((n))  cdr ((lst))  p64 (((n
-  0)))  atom? ((v))  / ((n . rest))  equal? ((a b))  apply ((f arg . rest))  cddar ((lst))  cddr ((lst))  separate-doc-from-body ((body
-  (doc NIL)))  = ((n . rest))  rand-u64 (NIL)  not ((v))  sqrt ((x))  set-cdr! ((cell new-second))  cdadar ((lst))  fn? ((v))  cdar ((lst))  lz-pack ((data
-  (level 0)))  *prompt* (NIL)  member ((item lst))  eq? ((a b))  cdaar ((lst))  getprop ((symbol
-  key (def NIL)))  putprop ((symbol key val))  * (rest)  bignum? ((v))  vm-stats (NIL)  fixnum (((n
-  0)))  memq ((item lst))  rand-f32 (NIL)  exp ((p))  bound? ((symbol))  ptr (((n 0)))  f64 (((n 0.0)))  io->str ((io))  caaadr ((lst))  odd? ((n))  caaddr ((lst))  cosh ((x))  caddar ((lst))  caaaar ((lst))  cdddar ((lst))  list? ((v))  iota ((count
-  (start 0) (step 1)))  table? ((v))  < ((v . rest))  repl (NIL)  print-stack-trace ((st))  make-system-image ((filename))  sym (term)  u16 (((n
-  0)))  s64 (((n 0)))  f32 (((n 0.0)))  sin ((r))  tanh ((r))  for ((min max f))  assoc ((key lst))  list-ref ((lst
-  n))  > ((v . rest))  + (rest)  cadadr ((lst))  acos ((x))  caddr ((lst))  abs ((n))  compare ((a
-  b))  error (args)  catch ((tag expr))  __start ((argv interactive))  print-exception ((e))  add-exit-hook ((fun))  load ((filename))  tan ((r))  str-join ((strlist
-  sep))  str? ((v))  doc-group ((group-name doc))  cons? ((v))  keyword? ((v))  cdaaar ((lst))  even? ((n))  aref ((sequence
-  subscript0 . rest))  zero? ((n))  proper-list? ((v))  >= ((v . rest))  sym? ((v))  void? ((x))  length= ((seq
-  n))  bounds-error (args)  int? ((v))  random ((max))  doc-for ((term . doc))  eval ((x))  aset! ((sequence
-  subscripts… new-value))  cdaadr ((lst))  car ((lst))  <= ((v . rest))  u32 (((n 0)))  arr ((type . rest))  cons ((first
-  second))  - ((n . rest))  u64 (((n 0)))  rand (NIL)  assq ((key lst))  asin ((x))  log ((x))  length> ((seq
-  n))  arg-error (args)  assv ((key lst))  cdaddr ((lst))  bignum (((n 0)))  vec? ((v))  min ((v . rest))  cddaar ((lst))  eqv? ((a
-  b))  io? ((term))  eof-object? ((v))  list (rest)  help (((:print-header help-print-header) . rest))  memv ((item
-  lst))  max ((v . rest))  cddadr ((lst))  rand-u32 (NIL)  closure? ((v))  copy-list ((l (n NIL)))  __init_globals (NIL)  sinh ((r))  top-level-exception-handler ((e))  rand-f64 (NIL)  help-print-header ((term
-  sigs (:kind NIL) (:lpad "")))  p32 (((n 0)))  s16 (((n 0)))  rune? ((v))  defc*r ((name))  identity ((v)))  *doc* #table(append "Return the concatenation of the arguments.\n\nLists are copied, except the last one, which becomes the `cdr` of the\nfinal dotted pair.  It's returned as is if it was the only argument.\nNo lists are changed in-place.\n\nExamples:\n\n    (append '(1) '(2 3) '(4)) → (1 2 3 4)\n    (append '(1))             → (1)"  io-eof? "Return `T` if `io` is currently in the \"end of file\" state, `NIL`\notherwise."  cadddr "Shorthand for (car (cdr (cdr (cdr lst))))."  fixnum? "Return `T` if `v` is of a fixnum type, `NIL` otherwise."  exit "Terminate the process with the specified status.  Does not return.\nThe status is expected to be a string in case of an error.\n\nExamples:\n\n    (exit) ; exit with status 0 (nil on Plan 9)\n    (exit \"error\") ; exit with status 1 (\"error\" on Plan 9)"  __finish "A function called right before exit by the VM.\n\nThe exit `status` is either `NIL` or a string referring to an error\ncondition."  caaar "Shorthand for (car (car (car lst)))."  s32 "Construct a 32-bit signed number."  u8 "Construct a 8-bit unsigned number."  any "Return `T` if the predicate is true for _any_ element of the list,\n`NIL` otherwise.\n\nExample:\n\n   (any even? '(1 3 5 7))                       → NIL\n   (any (λ (s) (length> s 1)) '(\"ab\" \"cd\" \"e\")) → T"  s8 "Construct a 8-bit signed number."  num? "Return `T` if `v` is of a numerical type, `NIL` otherwise.\n\nNumerical types include floating point, fixnum, bignum, etc.\nNote: ironically, a NaN value is considered a number by this function\nsince it's only testing the _type_ of the value."  assert "Throw an exception if `expr` evaluates to `NIL`.  Return `T` in any\nother case.\n\nExamples:\n\n    (def s \"abc\")\n    (assert (= (length s) 3))         → T\n    (assert (eq? (str-rune s 0) #\\x)) → assertion failed: ..."  1+ "Equivalent to `(+ n 1)` - increment by one."  throw "Raise an exception consisting of a tag and a value.\n\nThis exception can be caught by `catch`."  positive? "Return `T` if `n` is greater than zero. Shorthand for `(> n 0)`."  atan "Return the arc tangent of `x` in radians."  *builtins* "VM instructions as closures."  remprop "Remove a property value associated with the symbol."  (doc
+            *properties* #table(*formals-list* #table(append (lists)  io-eof? ((io))  cadddr ((lst))  fixnum? ((v))  exit (((status
+  NIL)))  __finish ((status))  caaar ((lst))  s32 (((n 0)))  u8 (((n 0)))  any ((pred lst))  s8 (((n
+  0)))  num? ((v))  assert ((expr))  1+ ((n))  throw ((tag value))  positive? ((n))  atan ((x))  remprop ((symbol
+  key))  cdddar ((lst))  set-cdr! ((cell new-second))  eq? ((a b))  io->str ((io))  bound? ((symbol))  odd? ((n))  list? ((v))  sym (term)  tanh ((r))  for ((min
+  max f))  tan ((r))  doc-group ((group-name doc))  cdaaar ((lst))  bounds-error (args)  even? ((n))  zero? ((n))  proper-list? ((v))  random ((max))  eval ((x))  cdaadr ((lst))  u32 (((n
+  0)))  cons ((first second))  assq ((key lst))  vec? ((v))  min ((v . rest))  cddaar ((lst))  io? ((term))  eof-object? ((v))  help (((:print-header
+  help-print-header) . rest))  p32 (((n 0)))  sym-set-doc ((symbol doc-seq . formals-list))  macrocall? ((e))  macroexpand ((e))  caadr ((lst))  defstruct ((name
+  docs… options… (slot-1 DEFAULT) slot-2 slot-3)
+  (name (:type 'vec) (:named T) (:constructor T) (:conc-name T) (:predicate T) . slots))  caadar ((lst))  buffer (NIL)  list-tail ((lst
+  n))  assoc-list (kvs)  builtin? ((v))  macroexpand-1 ((e))  str (term)  negative? ((n))  void (rest)  assert-fail ((expr . what))  1- ((n))  equal? ((a
+  b))  cddar ((lst))  = ((n . rest))  fn? ((v))  caaadr ((lst))  make-system-image ((filename))  subseq ((seq
+  start (end NIL)))  vm-stats (NIL)  ptr (((n 0)))  caddar ((lst))  print-stack-trace ((st))  cosh ((x))  < ((v . rest))  f32 (((n
+  0.0)))  sin ((r))  > ((v . rest))  abs ((n))  str? ((v))  cons? ((v))  aset! ((sequence
+                                                                                 subscripts…
+                                                                                 new-value))  - ((n . rest))  rand (NIL)  copy-list ((lst
+  (n NIL)))  sinh ((r))  top-level-exception-handler ((e))  identity ((v))  map-int ((f count))  get-syntax ((sym))  ptr? ((v))  expt ((x
+  p))  gc (NIL)  lz-unpack ((data :to destination)
+                            (data :size decompressed-bytes))  log10 ((x))  gensym? ((v))  cdddr ((lst))  set-car! ((cell
+  new-first))  vec (rest)  rune (((n 65533)))  cadar ((lst))  type-error (args)  file ((path (:read
+  NIL)
+  (:write NIL) (:create NIL) (:truncate NIL) (:append NIL)))  cdr ((lst))  / ((n . rest))  separate-doc-from-body ((body
+  (doc NIL)))  rand-u64 (NIL)  cdadar ((lst))  sqrt ((x))  lz-pack ((data (level 0)))  *prompt* (NIL)  member ((item
+  lst))  bignum? ((v))  fixnum (((n 0)))  memq ((item lst))  f64 (((n 0.0)))  exp ((p))  caaaar ((lst))  s64 (((n
+  0)))  assoc ((key lst))  + (rest)  cadadr ((lst))  compare ((a b))  error (args)  print-exception ((e))  load ((filename))  keyword? ((v))  aref ((sequence
+  subscript0 . rest))  sym? ((v))  u64 (((n 0)))  assv ((key lst))  bignum (((n 0)))  eqv? ((a b))  list (rest)  __init_globals (NIL)  rand-u32 (NIL)  defc*r ((name))  cddddr ((lst))  cadr ((lst))  cdadr ((lst))  nan? ((v))  caar ((lst))  div0 ((n₀
+  n₁))  set-syntax! ((sym f))  arr? ((v))  cadaar ((lst))  unwind-protect ((expr finally))  cos ((r))  every ((pred
+  lst))  atom? ((v))  p64 (((n 0)))  apply ((f arg . rest))  cddr ((lst))  not ((v))  cdar ((lst))  cdaar ((lst))  iota ((count
+  (start 0) (step 1)))  caaddr ((lst))  getprop ((symbol key (def NIL)))  putprop ((symbol key val))  * (rest)  rand-f32 (NIL)  repl (NIL)  table? ((v))  list-ref ((lst
+  n))  u16 (((n 0)))  acos ((x))  caddr ((lst))  catch ((tag expr))  __start ((argv interactive))  add-exit-hook ((fun))  str-join ((strlist
+  sep))  >= ((v . rest))  void? ((x))  length= ((seq n))  int? ((v))  doc-for ((term . doc))  car ((lst))  <= ((v . rest))  arr ((type . rest))  length> ((seq
+  n))  arg-error (args)  asin ((x))  log ((x))  cdaddr ((lst))  cddadr ((lst))  memv ((item lst))  max ((v . rest))  closure? ((v))  rand-f64 (NIL)  help-print-header ((term
+  sigs (:kind NIL) (:lpad "")))  s16 (((n 0)))  rune? ((v)))  *doc* #table(append "Return the concatenation of the arguments.\n\nLists are copied, except the last one, which becomes the `cdr` of the\nfinal dotted pair.  It's returned as is if it was the only argument.\nNo lists are changed in-place.\n\nExamples:\n\n    (append '(1) '(2 3) '(4)) → (1 2 3 4)\n    (append '(1))             → (1)"  io-eof? "Return `T` if `io` is currently in the \"end of file\" state, `NIL`\notherwise."  cadddr "Shorthand for (car (cdr (cdr (cdr lst))))."  fixnum? "Return `T` if `v` is of a fixnum type, `NIL` otherwise."  exit "Terminate the process with the specified status.  Does not return.\nThe status is expected to be a string in case of an error.\n\nExamples:\n\n    (exit) ; exit with status 0 (nil on Plan 9)\n    (exit \"error\") ; exit with status 1 (\"error\" on Plan 9)"  __finish "A function called right before exit by the VM.\n\nThe exit `status` is either `NIL` or a string referring to an error\ncondition."  caaar "Shorthand for (car (car (car lst)))."  s32 "Construct a 32-bit signed number."  u8 "Construct a 8-bit unsigned number."  any "Return `T` if the predicate is true for _any_ element of the list,\n`NIL` otherwise.\n\nExample:\n\n   (any even? '(1 3 5 7))                       → NIL\n   (any (λ (s) (length> s 1)) '(\"ab\" \"cd\" \"e\")) → T"  s8 "Construct a 8-bit signed number."  num? "Return `T` if `v` is of a numerical type, `NIL` otherwise.\n\nNumerical types include floating point, fixnum, bignum, etc.\nNote: ironically, a NaN value is considered a number by this function\nsince it's only testing the _type_ of the value."  assert "Throw an exception if `expr` evaluates to `NIL`.  Return `T` in any\nother case.\n\nExamples:\n\n    (def s \"abc\")\n    (assert (= (length s) 3))         → T\n    (assert (eq? (str-rune s 0) #\\x)) → assertion failed: ..."  1+ "Equivalent to `(+ n 1)` - increment by one."  throw "Raise an exception consisting of a tag and a value.\n\nThis exception can be caught by `catch`."  positive? "Return `T` if `n` is greater than zero. Shorthand for `(> n 0)`."  atan "Return the arc tangent of `x` in radians."  *builtins* "VM instructions as closures."  remprop "Remove a property value associated with the symbol."  (doc
   group list) "Working with lists."  (doc group array) "Arrays and vectors."  cdddar "Shorthand for (cdr (cdr (cdr (car lst))))."  set-cdr! "Modify a cons cell (a list) in-place by putting `new-second` as its\nsecond element (tail of the list).  Return the modified cons\ncell (list).\n\nExamples:\n\n    (def q '(1 2 3 4 5))\n    (set-cdr! q '(6 7)) → (1 6 7)\n    q                   → (1 6 7)"  eq? "Return `T` if `a` and `b` are the same object, `NIL` otherwise.\n\nExamples:\n\n    (eq? 0.0 0) → NIL\n    (eq? 0 0)   → T\n    (def a \"1\")\n    (def b \"1\")\n    (eq? a b)   → NIL\n    (def a '(1))\n    (def b '(1))\n    (eq? a b)   → NIL"  io->str "Return an in-memory `io` buffer converted to a string."  bound? "Return `T` if `symbol` has a value associated with it, `NIL` otherwise."  odd? "Return `T` if `n` is an odd integer, `NIL` otherwise."  list? "Return `T` if the value is either `NIL` or a cons cell, `NIL`\notherwise."  sym "Return a symbol with the name being the concatenation of terms\nformatted as strings.\n\nThis is equivalent to `(sym (str terms…))`.\n\nExamples:\n\n    (sym \"a\" 'b 1) → ab1"  tanh "Return the hyperbolic tangent of `x`."  for "Call the function `f` with a single integer argument, starting from\n`min` and ending with `max`.\n\nExamples:\n\n    (for 0 2 (λ (i) (print (- 2 i)))) → 210"  (doc
   group vm) "VM-related functions."  (doc group rand) "Random numbers generation."  tan "Return the tangent of `r`, where `r` is given in radians."  doc-group "Define documentation for a group."  cdaaar "Shorthand for (cdr (car (car (car lst))))."  bounds-error "Raise a bounds error exception."  even? "Return `T` if `n` is an even integer, `NIL` otherwise."  *properties* "All properties of symbols recorded with `putprop` are recorded in this\ntable."  zero? "Return `T` if `n` is zero. Shorthand for `(= n 0)`."  proper-list? "Return `T` is the value is a proper list.  That is, a non-circular\nlist with the last element being `NIL`, as opposed to a dotted list.\n\nExamples:\n\n    (proper-list? NIL)      → T\n    (proper-list? '(1))     → T\n    (proper-list? '(1 . 2)) → NIL\n    (def l '(1))\n    (set-cdr! l l)          → #0=(1 . #0#)\n    (length l)              → +inf.0\n    (proper-list? l)        → NIL"  random "Return a random number in the range `[0, max]` (inclusive).\n\nThe result is either an integer or a floating point number, depending\non the type of the `max` argument.\n\nExamples:\n\n    (random 1)   → 1\n    (random 1.0) → 0.69517"  eval "Evaluate expression.\n\nExamples:\n\n    (eval '(begin (set! x 1) (set! y 2) (+ x y)))\n    → 3\n    x → 1\n    y → 2"  cdaadr "Shorthand for (cdr (car (car (cdr lst))))."  u32 "Construct a 32-bit unsigned number."  cons "Return a cons cell containing two arguments.\n\nExamples:\n\n    (cons 1 2)                     → (1 . 2)\n    (cons 1 '(2))                  → (1 2)\n    (cons 1 (cons 2 (cons 3 NIL))) → (1 2 3)"  assq "Return a pair of a matching key and the associated value, or `NIL` if\nnone matched.  Keys are compared using `eq?`."  most-positive-fixnum "A constant integer closest to positive infinity that can be\nrepresented by fixnum type on this particular platform."  vec? "Return `T` if `v` is a vector, `NIL` otherwise."  min "Return the smallest among the arguments.\n\nExamples:\n\n    (min 3 1 9 4)     → 1\n    (min 'c 'h 'z 'a) → a\n    (min \"t\" \"g\" \"a\") → \"a\""  cddaar "Shorthand for (cdr (cdr (car (car lst))))."  io? "Return `T` if `term` is of `io` type, `NIL` otherwise."  eof-object? "Return `T` if the argument is `#<eof>`, `NIL` otherwise.\n\nThis object is returned by I/O functions to signal end of file,\nwhere applicable."  help "Display documentation for a specific term or group of terms, if\navailable.\n\nAn optional symbol `group` is used to query for documentation on a\ngroup instead of a single term.  All available documentation groups\ncan be displayed with `(help groups)`.\n\nAsterisk can be added to the beginning and/or end of the term in order\nto list the matching terms defined in the current environment.  This\ncan be useful to recall a function's name.\n\nExamples:\n\n    (help str?)       ; show documentation for str?\n    (help groups)     ; show documentation groups\n    (help type group) ; list items for dealing with types\n    (help group type) ; same as ^\n    (help str->*)     ; find functions converting from strings\n    (help *->str)     ; find functions converting to strings\n    (help *num*)      ; find anything related to numbers"  p32 "Construct a 32-bit abstract pointer value."  sym-set-doc "Set the documentation for the symbol."  macrocall? "Return the macro application function if `e` refers to a macro call,\n`NIL` otherwise.\n\nExamples:\n\n    (macrocall? '(car NIL))       → NIL\n    (macrocall? '(let ((x 1)) 2)) → #fn(...)"  *syntax-environment* "Table containing macro definitions.\n\nThe keys are macro names, the values are their application functions."  macroexpand "Return a fully macro-expanded expression.  Expansion will continue\nuntil no more macro calls are left.\n\nExamples:\n\n    (let ((a 3) (b 4) (c 5))\n      (macroexpand `(let* {[x ,a] [y ,b]} (+ x y ,c))))\n    → ((λ (x)\n         ((λ (y)\n            (+ x y 5))\n          4))\n       3)"  caadr "Shorthand for (car (car (cdr lst)))."  defstruct "Defines a structure type with a specific name and slots.\n\nThe d
\ No newline at end of file
   group number) "Operations with numbers."  abs "Return absolute value of the argument."  str? "Return `T` if the argument is a string, `NIL` otherwise."  cons? "Return `T` if `v` is a cons cell, `NIL` otherwise.\n\nExamples:\n\n    (cons? 0)    → NIL\n    (cons? NIL)  → NIL\n    (cons? '(1)) → T"  aset! "Modify the sequence element specified by the subscripts and return the\nnew value.  The sequence can be an array, vector, a list.\nMulti-dimensional sequences of variating types are also supported.\n\nExamples:\n\n    (def a '((1 #(2 (3)) 4)))\n    (aset! a 1 'x)     → index 1 out of bounds\n    (aset! a 0 0 'x)   → x\n    a                  → ((x #(2 (3)) 4))\n    (aset! a 0 1 9)    → 9\n    a                  → ((x #(9 (3)) 4))"  T "A boolean \"true\".\n\nExamples:\n\n    (not T)         → NIL\n    (if T 'yes 'no) → yes"  - "Return the result of subtraction.  With only one argument a\nnegation is performed.\n\nExamples:\n\n    (- 1.5) → -1.5\n    (- 3 2) → 1"  rand "Return a random non-negative fixnum on its maximum range."  (doc
@@ -61,93 +59,81 @@
 /x` is returned.  If the result is integer-valued, it is\nreturned as an integer.\n\nExamples:\n\n    (/ 2)       → 0.5\n    (/ 7 2 2)   → 1.75\n    (/ 10 -2)   → -5 ; a fixnum\n    (/ 6.9 1.9) → 3.6315…"  separate-doc-from-body "Take a list of terms and return a pair `(doc . body)`, where the first\nelement contains a list of documentation-related terms, and the second\ncontains the rest of the terms."  rand-u64 "Return a random integer on interval [0, 2⁶⁴-1]."  cdadar "Shorthand for (cdr (car (cdr (car lst))))."  sqrt "Return the square root of `x`."  lz-pack "Return data compressed using Lempel-Ziv.\n\nThe data must be an array, returned value will have the same type.\nThe optional `level` is between `0` and `10`.  With `level` set to\n`0` a simple LZSS using hashing will be performed.  Levels between\n`1` and `9` offer a trade-off between time/space and ratio.  Level\n`10` is optimal but very slow."  *prompt* "Function called by REPL to tell the user it's expecting input.\n\nThe default `*prompt*` function prints `#;> `, which by itself is a\ncommented-out expression, allowing the user to copy-paste the entire\nline (with the prompt) to re-evaluate."  member "Return the tail of a list beginning with the item, or `NIL` otherwise.\nList elements are compared to the `item` using `equal?`.\n\nExamples:\n\n    (member 1 '(3 2 1 0)) → (1 0)\n    (member 1 '(2 3))     → NIL"  bignum? "Return `T` if the argument is a bignum, `NIL` otherwise."  memq "Return the tail of a list beginning with the item, or `NIL` otherwise.\nList elements are compared to the `item` using `eq?`."  f64 "Construct a 64-bit floating point number."  fixnum "Construct a fixnum."  exp "Return the value of `e` (natural logarithms base) raised to the power\nof `p`."  caaaar "Shorthand for (car (car (car (car lst))))."  (doc
   group io) "I/O functionality."  (doc group builtin) "Built-in operators."  s64 "Construct a 64-bit signed number."  NIL "An empty list.  Can be used as the opposite of T in boolean\nexpressions.\n\nExamples:\n\n    (not NIL)         → T\n    (if NIL 'yes 'no) → no\n    (car NIL)         → NIL\n    (cdr NIL)         → NIL"  assoc "Return a pair of a matching key and the associated value, or `NIL` if\nnone matched.  Keys are compared using `equal?`.\n\nExamples:\n\n    (def L (assoc-list 'a 0 'b 1))\n    (assoc 'b L) → (b . 1)\n    (assoc 'c L) → NIL"  + "Return sum of the arguments or `0` when none specified."  cadadr "Shorthand for (car (cdr (car (cdr lst))))."  (doc
   group struct) "Declaring and manipulating structures."  compare "Return -1 if `x` is less than `y`, 0 if equal, and `1` if `y` is\ngreater than `x`.\n\nExamples:\n\n    (compare 'a 'b)   → -1\n    (compare 1 1)     → 0\n    (compare \"b\" \"a\") → 1"  error "Raise an error exception."  print-exception "Print the exception in a human-readable form.\n\nExceptions are lists containing various information about the error.\nThey may optionally, as the first element, contain the error location\nof the form `(io row column)`.\n\nExamples:\n\n    (def e (list (list *stdin* 3 10) 'type-error 'str 123))\n    (print-exception e)\n    → *stdin*:3:10: type error: expected str, got fixnum: 123"  load "Read and evaluate expression from a file."  keyword? "Return `T` if the argument is a keyword, `NIL` otherwise."  aref "Return the sequence element specified by the subscripts.  The sequence\ncan be an array, vector, a list.  Multi-dimensional sequences\nof variating types are also supported.\n\nExamples:\n\n    (def a '((1 #(2 (3)) 4)))\n    (aref a 0)     → (1 (2 (3)) 4)\n    (aref a 1)     → index 1 out of bounds\n    (aref a 0 0)   → 1\n    (aref a 0 1 0) → 2\n    (aref a 0 2)   → 4"  sym? "Return `T` if `v` is a symbol, `NIL` otherwise."  u64 "Construct a 64-bit unsigned number."  Instructions "VM instructions mapped to their encoded byte representation."  assv "Return a pair of a matching key and the associated value, or `NIL` if\nnone matched.  Keys are compared using `eqv?`."  bignum "Construct a bignum.  As opposed to a fixnum, its value is not limited."  (doc
-_ element of the list,\n`NIL` otherwise.\n\nExample:\n\n   (every odd? '(1 3 5 7))                        → T\n   (every (λ (s) (length> s 1)) '(\"ab\" \"cd\" \"e\")) → NIL"  atom? "Return `T` if `v` is a _not_ a cons cell, `NIL` otherwise.  This is\nthe opposite of `cons?`.\n\nThe term \"atom\" comes from the idea of being indivisible.\n\nExamples:\n\n    (atom? \"a\")  → T\n    (atom? NIL)  → T\n    (atom? '(1)) → NIL"  p64 "Construct a 64-bit abstract pointer value."  apply "Return the result of applying a function `f` to a list of arguments.\n\nThe last argument must always be a list which gets spliced as\narguments to the function.\n\nExamples:\n\n    (apply + 1 2 '(3 4 5))   → 15\n    (apply vec '(1 2 3))     → #(3 4 5)\n    (apply arr 'u8 '(3 4 5)) → #vu8(3 4 5)"  cddr "Shorthand for (cdr (cdr lst))."  not "Return `T` if `v` is `NIL`, `T` otherwise."  (doc
-  group sys) "OS-specific functions."  cdar "Shorthand for (cdr (car lst))."  cdaar "Shorthand for (cdr (car (car lst)))."  iota "Return a list of generated indices.\n\nThe sequence of numbers generated will contain the elements\n\n    (start start+step … start+(count-1)*step)\n\nExamples:\n\n    (iota 4)        → (0 1 2 3)\n    (iota 4 6)      → (6 7 8 9)\n    (iota 4 6 -0.5) → (6 5.5 5.0 4.5)"  caaddr "Shorthand for (car (car (cdr (cdr lst))))."  getprop "Return a property value associated with the symbol or `def` if\nmissing."  putprop "Associate a property value with the symbol."  * "Return product of the arguments or `1` when none specified."  rand-f32 "Return a random 32-bit floating pointer number on [0.0, 1.0] interval."  repl "Run interactive prompt in a loop, reading and evaluating the\nexpressions entered by the user and printing the results."  (doc
+int (/ 1 0)) (newline) ; an error here\n                           (print \"b\")     (newline)\n                    (begin (print \"c\")     (newline))))\n    → \"a\"\n      \"c\"\n      /: division by zero"  cos "Return the cosine of `r`, where `r` is given in radians."  every "Return `T` if the predicate is true for _every_ element of the list,\n`NIL` otherwise.\n\nExample:\n\n   (every odd? '(1 3 5 7))                        → T\n   (every (λ (s) (length> s 1)) '(\"ab\" \"cd\" \"e\")) → NIL"  atom? "Return `T` if `v` is a _not_ a cons cell, `NIL` otherwise.  This is\nthe opposite of `cons?`.\n\nThe term \"atom\" comes from the idea of being indivisible.\n\nExamples:\n\n    (atom? \"a\")  → T\n    (atom? NIL)  → T\n    (atom? '(1)) → NIL"  p64 "Construct a 64-bit abstract pointer value."  apply "Return the result of applying a function `f` to a list of arguments.\n\nThe last argument must always be a list which gets spliced as\narguments to the function.\n\nExamples:\n\n    (apply + 1 2 '(3 4 5))   → 15\n    (apply vec '(1 2 3))     → #(3 4 5)\n    (apply arr 'u8 '(3 4 5)) → #vu8(3 4 5)"  cddr "Shorthand for (cdr (cdr lst))."  not "Return `T` if `v` is `NIL`, `T` otherwise."  (doc
+  group sys) "OS-specific functions."  cdar "Shorthand for (cdr (car lst))."  cdaar "Shorthand for (cdr (car (car lst)))."  iota "Return a list of generated indices.\n\nThe sequence of numbers generated will contain the elements\n\n    (start start+step … start+(count-1)*step)\n\nExamples:\n\n    (iota 4)        → (0 1 2 3)\n    (iota 4 6)      → (6 7 8 9)\n    (iota 4 6 -0.5) → (6 5.5 5.0 4.5)"  caaddr "Shorthand for (car (car (cdr (cdr lst))))."  getprop "Return a property value associated with the symbol or `def` if\nmissing."  putprop "Associate a property value with the symbol."  * "Return product of the arguments or `1` when none specified."  rand-f32 "Return a random 32-bit floating pointer number on [0.0, 1.0] interval."  repl "Run interactive prompt in a loop, reading and evaluating the\nexpressions entered by the user and printing the results."  (doc
+  group type) "Dealing with types."  table? "Return `T` if the argument is a table, `NIL` otherwise."  list-ref "Return nth element of the list, or `NIL` if the list is shorter.\n\nExamples:\n\n    (def l '(a b c))\n    (list-ref l 0)  → a\n    (list-ref l 2)  → c\n    (list-ref l 10) → NIL"  u16 "Construct a 16-bit unsigned number."  acos "Return the arc cosine of `x` in radians."  caddr "Shorthand for (car (cdr (cdr lst)))."  catch "Evaluate `expr` and catch any exception thrown while evaluating by a\ncall to `throw` with the specified `tag`.\n\nIf no exception was thrown, return the result of the expression.  In\ncase an exception thrown has a different tag, raise it further, to be\ncaught on a higher level of exception handling logic."  __start "The system boot image entry.\n\nThis is the first function executed by the VM after initialization."  add-exit-hook "Puts an one-argument function on top of the list of exit hooks.\n\nOn shutdown each exit hook is called with the exit status as a single\nargument, which is (usually) `NIL` on success and a string describing\nan error otherwise."  str-join "Return concatenated elements of `strlist`, separated between each\nother with `sep`, as a single string.\n\nExamples:\n\n    (str-join '(\"\" \"n\" \"9\" \"heh\") #\\/) → \"/n/9/heh\"\n    (str-join '(\"a\" \"b\" \"c\") \"..\")     → \"a..b..c\""  >= "Return `T` if the arguments are in non-increasing order (previous\none is greater than or equal to the next one)."  void? "Return `T` if `x` is `#<void>`, `NIL` otherwise."  length= "Perform a bounded length test and return `T` if the length is `n`,\n`NIL` otherwise.\n\nUse this instead of `(= (length seq) n)`, since it avoids unnecessary\nwork and always terminates.\n\nThe value of `seq` can be of any sequence type."  int? "Return `T` if the argument is an integer, `NIL` otherwise."  doc-for "Define documentation for a top level term.\n\nIf `term` is a function signature and `doc` is not specified, just\nthe signature will be included in the documentation, without\nreplacing any previously defined.\n\nFirst `doc` argument is supposed to be a string with the description\nof the term.  The following arguments are expected to be optional tag\npairings that provide grouping for multiple symbols and \"see also\"\nreferences.\n\nUseful in cases where setting the documentation for a term can't\n(or not preferred to) be made during the definition of said term.\nOne of those reasons is that the term is a built-in function\nimplemented in C.\n\nExamples:\n\n    (doc-for (func arg (arg2 0))\n      \"Return something about the `arg` and `arg2`.  This is a short\n       description.\n\n       This is the longer description, following the short one.\n\n       Examples:\n\n           (func 0)   → T\n           (func 1 3) → NIL\"\n      :doc-group stuff\n      :doc-see func2)\n    (doc-for (func arg (:another-variant NIL)))"  car "Return the first element of a cons cell (head of a list) or `NIL` if\nnot available.\n\nExamples:\n\n    (car NIL)      → NIL\n    (car '(1 2 3)) → 1\n    (car '(1 . 2)) → 1"  <= "Return `T` if the arguments are in non-decreasing order (previous\none is less than or equal to the next one)."  arr "Construct a packed array containing the specified arguments.\n\nThe arguments will be coerced to a single `type`.\n\nExamples:\n\n    (arr 's8 0 1 2)   → #arr(s8 0 1 2)\n    (arr 'rune 0 1 2) → #arr(rune #\\nul #\\soh #\\stx)"  length> "Perform a bounded length test and return `T` if the length is greater\nthan `n`, `NIL` otherwise.\n\nUse this instead of `(> (length seq) n)`, since it avoids unnecessary\nwork and always terminates.\n\nThe value of `seq` can be of any sequence type."  arg-error "Raise an argument error exception."  asin "Return the arc sine of `x` in radians."  log "Return the natural logarithm of `x`."  cdaddr "Shorthand for (cdr (car (cdr (cdr lst))))."  most-negative-fixnum "A constant integer closest to negative infinity that can be\nrepresented by fixnum type on this particular platform."  memv "Return the tail of a list beginn
\ No newline at end of file
+  group math) "Various mathematical operations and constants."  rand-f64 "Return a random 64-bit floating point number on interval [0.0, 1.0]."  help-print-header "Format and print signature(s) of the term for `(help term)` output."  arg-counts "VM instructions mapped to their expected arguments count."  s16 "Construct a 16-bit signed number."  rune? "Return `T` if the value is a rune, `NIL` otherwise.")  *doc-extra* #table(append ((:doc-group . list)
+  (:doc-see . nconc))  io-eof? ((:doc-group . io))  cadddr ((:doc-group . list))  fixnum? ((:doc-group . type)
+  (:doc-group . number) (:doc-see . fixnum) (:doc-group . builtin))  exit ((:doc-group . sys))  __finish ((:doc-group . vm)
+  (:doc-see . __start))  caaar ((:doc-group . list))  s32 ((:doc-group . number) (:doc-see . u32))  u8 ((:doc-group . number)
+  (:doc-see . s8))  any ((:doc-group . list) (:doc-see . every))  s8 ((:doc-group . number) (:doc-see . u8))  num? ((:doc-group . type)
+  (:doc-group . number) (:doc-see . nan?) (:doc-group . builtin))  assert ((:doc-group . debug) (:doc-see . assert-fail))  1+ ((:doc-group . number)
+  (:doc-see . 1-))  throw ((:doc-group . error) (:doc-see . catch))  positive? ((:doc-group . number)
+                                                                                (:doc-group . compare))  atan ((:doc-group . math))  *builtins* ((:doc-group . builtin))  remprop ((:doc-group . prop))  cdddar ((:doc-group . list))  set-cdr! ((:doc-group . list)
+  (:doc-group . builtin))  eq? ((:doc-group . compare) (:doc-group . builtin))  io->str ((:doc-group . io))  bound? ((:doc-group . builtin))  odd? ((:doc-group . number)
+  (:doc-see . even?))  list? ((:doc-group . list) (:doc-group . type) (:doc-see . list) (:doc-see . proper-list?))  sym ((:doc-see . sym?))  tanh ((:doc-group . math))  for ((:doc-group . builtin))  tan ((:doc-group . math))  doc-group ((:doc-group . doc))  cdaaar ((:doc-group . list))  bounds-error ((:doc-group . error))  even? ((:doc-group . number)
+  (:doc-see . odd?))  *properties* ((:doc-group . prop))  zero? ((:doc-group . number) (:doc-group . compare))  proper-list? ((:doc-group . list)
+  (:doc-group . type) (:doc-see . list?))  random ((:doc-group . rand))  eval ((:doc-group . vm) (:doc-see . load))  cdaadr ((:doc-group . list))  u32 ((:doc-group . number)
+  (:doc-see . s32))  cons ((:doc-group . list) (:doc-see . cons?) (:doc-see . list) (:doc-group . builtin))  assq ((:doc-group . list)
+  (:doc-see . assoc) (:doc-see . assv))  most-positive-fixnum ((:doc-group . number) (:doc-see . most-negative-fixnum))  vec? ((:doc-group . type)
 s\narguments to the function.\n\nExamples:\n\n    (apply + 1 2 '(3 4 5))   → 15\n    (apply vec '(1 2 3))     → #(3 4 5)\n    (apply arr 'u8 '(3 4 5)) → #vu8(3 4 5)"  cddr "Shorthand for (cdr (cdr lst))."  not "Return `T` if `v` is `NIL`, `T` otherwise."  (doc
   group sys) "OS-specific functions."  cdar "Shorthand for (cdr (car lst))."  cdaar "Shorthand for (cdr (car (car lst)))."  iota "Return a list of generated indices.\n\nThe sequence of numbers generated will contain the elements\n\n    (start start+step … start+(count-1)*step)\n\nExamples:\n\n    (iota 4)        → (0 1 2 3)\n    (iota 4 6)      → (6 7 8 9)\n    (iota 4 6 -0.5) → (6 5.5 5.0 4.5)"  caaddr "Shorthand for (car (car (cdr (cdr lst))))."  getprop "Return a property value associated with the symbol or `def` if\nmissing."  putprop "Associate a property value with the symbol."  * "Return product of the arguments or `1` when none specified."  rand-f32 "Return a random 32-bit floating pointer number on [0.0, 1.0] interval."  repl "Run interactive prompt in a loop, reading and evaluating the\nexpressions entered by the user and printing the results."  (doc
-
-  group sys) "OS-specific functions."  cdar "Shorthand for (cdr (car lst))."  cdaar "Shorthand for (cdr (car (car lst)))."  iota "Return a list of generated indices.\n\nThe sequence of numbers generated will contain the elements\n\n    (start start+step … start+(count-1)*step)\n\nExamples:\n\n    (iota 4)        → (0 1 2 3)\n    (iota 4 6)      → (6 7 8 9)\n    (iota 4 6 -0.5) → (6 5.5 5.0 4.5)"  caaddr "Shorthand for (car (car (cdr (cdr lst))))."  getprop "Return a property value associated with the symbol or `def` if\nmissing."  putprop "Associate a property value with the symbol."  * "Return product of the arguments or `1` when none specified."  rand-f32 "Return a random 32-bit floating pointer number on [0.0, 1.0] interval."  repl "Run interactive prompt in a loop, reading and evaluating the\nexpressions entered by the user and printing the results."  (doc
-  group type) "Dealing with types."  table? "Return `T` if the argument is a table, `NIL` otherwise."  list-ref "Return nth element of the list, or `NIL` if the list is shorter.\n\nExamples:\n\n    (def l '(a b c))\n    (list-ref l 0)  → a\n    (list-ref l 2)  → c\n    (list-ref l 10) → NIL"  u16 "Construct a 16-bit unsigned number."  acos "Return the arc cosine of `x` in radians."  caddr "Shorthand for (car (cdr (cdr lst)))."  catch "Evaluate `expr` and catch any exception thrown while evaluating by a\ncall to `throw` with the specified `tag`.\n\nIf no exception was thrown, return the result of the expression.  In\ncase an exception thrown has a different tag, raise it further, to be\ncaught on a higher level of exception handling logic."  __start "The system boot image entry.\n\nThis is the first function executed by the VM after initialization."  add-exit-hook "Puts an one-argument function on top of the list of exit hooks.\n\nOn shutdown each exit hook is called with the exit status as a single\nargument, which is (usually) `NIL` on success and a string describing\nan error otherwise."  str-join "Return concatenated elements of `strlist`, separated between each\nother with `sep`, as a single string.\n\nExamples:\n\n    (str-join '(\"\" \"n\" \"9\" \"heh\") #\\/) → \"/n/9/heh\"\n    (str-join '(\"a\" \"b\" \"c\") \"..\")     → \"a..b..c\""  >= "Return `T` if the arguments are in non-increasing order (previous\none is greater than or equal to the next one)."  void? "Return `T` if `x` is `#<void>`, `NIL` otherwise."  length= "Perform a bounded length test and return `T` if the length is `n`,\n`NIL` otherwise.\n\nUse this instead of `(= (length seq) n)`, since it avoids unnecessary\nwork and always terminates.\n\nThe value of `seq` can be of any sequence type."  int? "Return `T` if the argument is an integer, `NIL` otherwise."  doc-for "Define documentation for a top level term.\n\nIf `term` is a function signature and `doc` is not specified, just\nthe signature will be included in the documentation, without\nreplacing any previously defined.\n\nFirst `doc` argument is supposed to be a string with the description\nof the term.  The following arguments are expected to be optional tag\npairings that provide grouping for multiple symbols and \"see also\"\nreferences.\n\nUseful in cases where setting the documentation for a term can't\n(or not preferred to) be made during the definition of said term.\nOne of those reasons is that the term is a built-in function\nimplemented in C.\n\nExamples:\n\n    (doc-for (func arg (arg2 0))\n      \"Return something about the `arg` and `arg2`.  This is a short\n       description.\n\n       This is the longer description, following the short one.\n\n       Examples:\n\n           (func 0)   → T\n           (func 1 3) → NIL\"\n      :doc-group stuff\n      :doc-see func2)\n    (doc-for (func arg (:another-variant NIL)))"  car "Return the first element of a cons cell (head of a list) or `NIL` if\nnot available.\n\nExamples:\n\n    (car NIL)      → NIL\n    (car '(1 2 3)) → 1\n    (car '(1 . 2)) → 1"  <= "Return `T` if the arguments are in non-decreasing order (previous\none is less than or equal to the next one)."  arr "Construct a packed array containing the specified arguments.\n\nThe arguments will be coerced to a single `type`.\n\nExamples:\n\n    (arr 's8 0 1 2)   → #arr(s8 0 1 2)\n    (arr 'rune 0 1 2) → #arr(rune #\\nul #\\soh #\\stx)"  length> "Perform a bounded length test and return `T` if the length is greater\nthan `n`, `NIL` otherwise.\n\nUse this instead of `(> (length seq) n)`, since it avoids unnecessary\nwork and always terminates.\n\nThe value of `seq` can be of any sequence type."  arg-error "Raise an argument error exception."  asin "Return the arc sine of `x` in radians."  log "Return the natural logarithm of `x`."  cdaddr "Shorthand for (cdr (car (cdr (cdr lst))))."  most-negative-fixnum "A constant integer closest to negative infinity that can be\nrepresented by fixnum type on this particular platform."  memv "Return the tail of a list beginn
\ No newline at end of file
-  group math) "Various mathematical operations and constants."  rand-f64 "Return a random 64-bit floating point number on interval [0.0, 1.0]."  help-print-header "Format and print signature(s) of the term for `(help term)` output."  arg-counts "VM instructions mapped to their expected arguments count."  s16 "Construct a 16-bit signed number."  rune? "Return `T` if the value is a rune, `NIL` otherwise.")  *doc-extra* #table(sym-set-doc ((:doc-group . doc))  cddddr ((:doc-group . list))  append ((:doc-group . list)
-  (:doc-see . nconc))  map-int ((:doc-group . list) (:doc-see . iota))  macrocall? ((:doc-group . syntax)
-                                                                                    (:doc-see . macroexpand-1)
-                                                                                    (:doc-see . macroexpand))  *syntax-environment* ((:doc-group . syntax)
-  (:doc-see . get-syntax) (:doc-see . set-syntax!))  io-eof? ((:doc-group . io))  cadr ((:doc-group . list)
-                                                                                        (:doc-group . builtin))  get-syntax ((:doc-group . syntax)
-  (:doc-see . set-syntax!))  cdadr ((:doc-group . list))  cadddr ((:doc-group . list))  macroexpand ((:doc-group . syntax)
-  (:doc-see . macroexpand-1))  nan? ((:doc-group . number) (:doc-group . builtin))  caar ((:doc-group . list))  ptr? ((:doc-group . type)
-  (:doc-group . number) (:doc-see . ptr))  expt ((:doc-group . math))  fixnum? ((:doc-group . type)
-                                                                                (:doc-group . number)
-                                                                                (:doc-see . fixnum)
-                                                                                (:doc-group . builtin))  exit ((:doc-group . sys))  gc ((:doc-group . vm)
-  (:doc-see . vm-stats))  caadr ((:doc-group . list))  caaar ((:doc-group . list))  div0 ((:doc-group . number)
-  (:doc-group . builtin))  __finish ((:doc-group . vm) (:doc-see . __start))  lz-unpack ((:doc-group . compress))  s32 ((:doc-group . number)
-  (:doc-see . u32))  u8 ((:doc-group . number) (:doc-see . s8))  defstruct ((:doc-group . struct))  set-syntax! ((:doc-group . syntax)
-  (:doc-see . get-syntax))  caadar ((:doc-group . list))  log10 ((:doc-group . math))  any ((:doc-group . list)
-  (:doc-see . every))  s8 ((:doc-group . number) (:doc-see . u8))  buffer ((:doc-group . io))  num? ((:doc-group . type)
-  (:doc-group . number) (:doc-see . nan?) (:doc-group . builtin))  gensym? ((:doc-group . type) (:doc-see . sym?)
-  (:doc-see . sym))  list-tail ((:doc-group . list) (:doc-see . list-ref))  cdddr ((:doc-group . list))  assoc-list ((:doc-group . list)
-  (:doc-see . assoc))  assert ((:doc-group . debug) (:doc-see . assert-fail))  builtin? ((:doc-group . type)
-  (:doc-see . builtin) (:doc-see . fn?) (:doc-see . closure?) (:doc-group . builtin))  set-car! ((:doc-group . list)
-  (:doc-group . builtin))  macroexpand-1 ((:doc-group . syntax) (:doc-see . macroexpand))  1+ ((:doc-group . number)
-  (:doc-see . 1-))  arr? ((:doc-group . type) (:doc-see . vec?) (:doc-see . arr) (:doc-see . vec))  cadaar ((:doc-group . list))  throw ((:doc-group . error)
-  (:doc-see . catch))  vec ((:doc-group . array) (:doc-see . vec-alloc) (:doc-see . arr) (:doc-group . builtin))  unwind-protect ((:doc-group . error)
-  (:doc-see . catch))  cos ((:doc-group . math))  positive? ((:doc-group . number) (:doc-group . compare))  atan ((:doc-group . math))  *builtins* ((:doc-group . builtin))  str ((:doc-group . string))  rune ((:doc-group . string)
-  (:doc-see . rune?))  remprop ((:doc-group . prop))  negative? ((:doc-group . number) (:doc-group . compare))  void ((:doc-see . void?))  cadar ((:doc-group . list))  assert-fail ((:doc-group . debug)
-  (:doc-see . assert))  type-error ((:doc-group . error))  file ((:doc-group . io))  every ((:doc-group . list)
-  (:doc-see . any))  1- ((:doc-group . number) (:doc-see . 1+))  cdr ((:doc-group . list) (:doc-group . builtin))  p64 ((:doc-group . number)
-  (:doc-see . p32) (:doc-see . ptr))  atom? ((:doc-group . type) (:doc-group . builtin))  / ((:doc-group . number)
-  (:doc-group . builtin))  equal? ((:doc-group . compare) (:doc-group . builtin))  apply ((:doc-group . builtin))  *interactive* ((:doc-group . vm)
-  (:doc-see . *prompt*))  cddar ((:doc-group . list))  cddr ((:doc-group . list))  separate-doc-from-body ((:doc-group . doc))  = ((:doc-group . compare)
-  (:doc-group . number) (:doc-group . builtin))  rand-u64 ((:doc-group . rand))  not ((:doc-group . builtin))  sqrt ((:doc-group . math))  set-cdr! ((:doc-group . list)
-  (:doc-group . builtin))  cdadar ((:doc-group . list))  fn? ((:doc-group . type) (:doc-see . fn)
-                                                                                  (:doc-see . builtin?)
-                                                                                  (:doc-see . closure?)
-                                                                                  (:doc-group . builtin))  cdar ((:doc-group . list))  lz-pack ((:doc-group . compress))  *prompt* ((:doc-group . vm)
-  (:doc-see . *interactive*))  member ((:doc-group . list) (:doc-see . memq) (:doc-see . memv))  eq? ((:doc-group . compare)
-  (:doc-group . builtin))  cdaar ((:doc-group . list))  bignum? ((:doc-group . type) (:doc-group . number)
-                                                                                     (:doc-see . bignum))  vm-stats ((:doc-group . vm))  memq ((:doc-group . list)
-  (:doc-see . member) (:doc-see . memv))  fixnum ((:doc-group . number) (:doc-see . fixnum?))  ptr ((:doc-group . number)
-  (:doc-see . p32) (:doc-see . p64) (:doc-see . ptr))  f64 ((:doc-group . number) (:doc-see . f32))  io->str ((:doc-group . io))  rand-f32 ((:doc-group . rand))  exp ((:doc-group . math))  bound? ((:doc-group . builtin))  * ((:doc-group . number)
-  (:doc-group . builtin))  putprop ((:doc-group . prop) (:doc-see . getprop))  getprop ((:doc-group . prop)
-                                                                                        (:doc-see . putprop))  caaadr ((:doc-group . list))  odd? ((:doc-group . number)
-  (:doc-see . even?))  caaddr ((:doc-group . list))  cosh ((:doc-group . math))  caddar ((:doc-group . list))  caaaar ((:doc-group . list))  cdddar ((:doc-group . list))  list? ((:doc-group . list)
-  (:doc-group . type) (:doc-see . list) (:doc-see . proper-list?))  iota ((:doc-group . list) (:doc-see . map-int))  table? ((:doc-group . type)
-  (:doc-see . table))  < ((:doc-group . compare) (:doc-group . builtin))  repl ((:doc-group . vm)
-                                                                                (:doc-see . *interactive*))  print-stack-trace ((:doc-group . error)
-  (:doc-see . stacktrace))  make-system-image ((:doc-group . vm))  sym ((:doc-see . sym?))  u16 ((:doc-group . number)
-  (:doc-see . s16))  s64 ((:doc-group . number) (:doc-see . u64))  NIL ((:doc-see . T))  f32 ((:doc-group . number)
-  (:doc-see . f64))  sin ((:doc-group . math))  tanh ((:doc-group . math))  for ((:doc-group . builtin))  assoc ((:doc-group . list)
-  (:doc-see . assoc-list) (:doc-see . assq) (:doc-see . assv))  > ((:doc-group . compare))  + ((:doc-group . number)
-  (:doc-group . builtin))  list-ref ((:doc-group . list) (:doc-see . list-tail))  cadadr ((:doc-group . list))  acos ((:doc-group . math))  caddr ((:doc-group . list))  abs ((:doc-group . math)
-  (:doc-group . number))  compare ((:doc-group . compare) (:doc-group . builtin))  error ((:doc-group . error))  catch ((:doc-group . error)
-  (:doc-see . catch) (:doc-see . unwind-protect))  __start ((:doc-group . vm) (:doc-see . __finish))  print-exception ((:doc-group . error)
-  (:doc-see . *exception-print-level*) (:doc-see . *exception-print-length*))  add-exit-hook ((:doc-group . vm))  load ((:doc-group . vm)
-  (:doc-see . eval))  tan ((:doc-group . math))  str-join ((:doc-group . string) (:doc-see . str-split))  str? ((:doc-group . type)
-  (:doc-see . str))  doc-group ((:doc-group . doc))  cons? ((:doc-group . type) (:doc-see . cons)
-                                                                                (:doc-see . list?)
-                                                                                (:doc-group . builtin))  keyword? ((:doc-group . type))  cdaaar ((:doc-group . list))  even? ((:doc-group . number)
-  (:doc-see . odd?))  aref ((:doc-group . array) (:doc-see . aset!) (:doc-group . builtin))  *properties* ((:doc-group . prop))  zero? ((:doc-group . number)
-  (:doc-group . compare))  >= ((:doc-group . compare))  sym? ((:doc-group . type) (:doc-see . sym)
-                                                                                  (:doc-see . gensym?)
-                                                                                  (:doc-group . builtin))  void? ((:doc-group . type)
-  (:doc-see . void))  proper-list? ((:doc-group . list) (:doc-group . type) (:doc-see . list?))  length= ((:doc-group . list)
-  (:doc-see . length>))  int? ((:doc-group . type) (:doc-group . number))  random ((:doc-group . rand))  bounds-error ((:doc-group . error))  doc-for ((:doc-group . doc))  eval ((:doc-group . vm)
-  (:doc-see . load))  aset! ((:doc-group . array) (:doc-see . aref) (:doc-group . builtin))  T ((:doc-see))  car ((:doc-group . list)
-  (:doc-group . builtin))  <= ((:doc-group . compare))  u32 ((:doc-group . number) (:doc-see . s32))  arr ((:doc-group . array)
-  (:doc-see . arr-alloc) (:doc-see . vec))  cons ((:doc-group . list) (:doc-see . cons?) (:doc-see . list)
-                                                                      (:doc-group . builtin))  - ((:doc-group . number)
-  (:doc-group . builtin))  u64 ((:doc-group . number) (:doc-see . s64))  rand ((:doc-group . rand))  assq ((:doc-group . list)
-  (:doc-see . assoc) (:doc-see . assv))  asin ((:doc-group . math))  log ((:doc-group . math))  most-positive-fixnum ((:doc-group . number)
-  (:doc-see . most-negative-fixnum))  Instructions ((:doc-group . builtin))  assv ((:doc-group . list)
-                                                                                   (:doc-see . assoc)
-                                                                                   (:doc-see . assq))  cdaadr ((:doc-group . list))  cdaddr ((:doc-group . list))  bignum ((:doc-group . number)
-  (:doc-see . bignum?))  length> ((:doc-group . list) (:doc-see . length=))  vec? ((:doc-group . type)
-                                                                                   (:doc-group . builtin))  min ((:doc-group . compare)
-  (:doc-see . max))  cddaar ((:doc-group . list))  arg-error ((:doc-group . error))  eqv? ((:doc-group . compare)
-  (:doc-group . builtin))  io? ((:doc-group . io) (:doc-group . type))  eof-object? ((:doc-group . io)
-                                                                                     (:doc-group . type))  list ((:doc-see . list?)
-  (:doc-see . cons) (:doc-group . builtin))  most-negative-fixnum ((:doc-group . number) (:doc-see . most-positive-fixnum))  help ((:doc-group . doc))  memv ((:doc-group . list)
+oin "Return concatenated elements of `strlist`, separated between each\nother with `sep`, as a single string.\n\nExamples:\n\n    (str-join '(\"\" \"n\" \"9\" \"heh\") #\\/) → \"/n/9/heh\"\n    (str-join '(\"a\" \"b\" \"c\") \"..\")     → \"a..b..c\""  >= "Return `T` if the arguments are in non-increasing order (previous\none is greater than or equal to the next one)."  void? "Return `T` if `x` is `#<void>`, `NIL` otherwise."  length= "Perform a bounded length test and return `T` if the length is `n`,\n`NIL` otherwise.\n\nUse this instead of `(= (length seq) n)`, since it avoids unnecessary\nwork and always terminates.\n\nThe value of `seq` can be of any sequence type."  int? "Return `T` if the argument is an integer, `NIL` otherwise."  doc-for "Define documentation for a top level term.\n\nIf `term` is a function signature and `doc` is not specified, just\nthe signature will be included in the documentation, without\nreplacing any previously defined.\n\nFirst `doc` argument is supposed to be a string with the description\nof the term.  The following arguments are expected to be optional tag\npairings that provide grouping for multiple symbols and \"see also\"\nreferences.\n\nUseful in cases where setting the documentation for a term can't\n(or not preferred to) be made during the definition of said term.\nOne of those reasons is that the term is a built-in function\nimplemented in C.\n\nExamples:\n\n    (doc-for (func arg (arg2 0))\n      \"Return something about the `arg` and `arg2`.  This is a short\n       description.\n\n       This is the longer description, following the short one.\n\n       Examples:\n\n           (func 0)   → T\n           (func 1 3) → NIL\"\n      :doc-group stuff\n      :doc-see func2)\n    (doc-for (func arg (:another-variant NIL)))"  car "Return the first element of a cons cell (head of a list) or `NIL` if\nnot available.\n\nExamples:\n\n    (car NIL)      → NIL\n    (car '(1 2 3)) → 1\n    (car '(1 . 2)) → 1"  <= "Return `T` if the arguments are in non-decreasing order (previous\none is less than or equal to the next one)."  arr "Construct a packed array containing the specified arguments.\n\nThe arguments will be coerced to a single `type`.\n\nExamples:\n\n    (arr 's8 0 1 2)   → #arr(s8 0 1 2)\n    (arr 'rune 0 1 2) → #arr(rune #\\nul #\\soh #\\stx)"  length> "Perform a bounded length test and return `T` if the length is greater\nthan `n`, `NIL` otherwise.\n\nUse this instead of `(> (length seq) n)`, since it avoids unnecessary\nwork and always terminates.\n\nThe value of `seq` can be of any sequence type."  arg-error "Raise an argument error exception."  asin "Return the arc sine of `x` in radians."  log "Return the natural logarithm of `x`."  cdaddr "Shorthand for (cdr (car (cdr (cdr lst))))."  most-negative-fixnum "A constant integer closest to negative infinity that can be\nrepresented by fixnum type on this particular platform."  memv "Return the tail of a list beginning with the item, or `NIL` otherwise.\nList elements are compared to the `item` using `eqv?`."  max "Return the largest among the arguments.\n\nExamples:\n\n    (max 3 1 9 4)     → 9\n    (max 'c 'h 'z 'a) → z\n    (max \"t\" \"g\" \"a\") → \"t\""  cddadr "Shorthand for (cdr (cdr (car (cdr lst))))."  closure? "Return `T` if the argument is a function that is implemented in LISP\n(as opposed to a C builtin), `NIL` otherwise.\n\nExamples:\n\n    (closure? closure?) → T\n    (closure? length)   → NIL"  (doc
+  group math) "Various mathematical operations and constants."  rand-f64 "Return a random 64-bit floating point number on interval [0.0, 1.0]."  help-print-header "Format and print signature(s) of the term for `(help term)` output."  arg-counts "VM instructions mapped to their expected arguments count."  s16 "Construct a 16-bit signed number."  rune? "Return `T` if the value is a rune, `NIL` otherwise.")  *doc-extra* #table(append ((:doc-group . list)
+  (:doc-see . nconc))  io-eof? ((:doc-group . io))  cadddr ((:doc-group . list))  fixnum? ((:doc-group . type)
+  (:doc-group . number) (:doc-see . fixnum) (:doc-group . builtin))  exit ((:doc-group . sys))  __finish ((:doc-group . vm)
+  (:doc-see . __start))  caaar ((:doc-group . list))  s32 ((:doc-group . number) (:doc-see . u32))  u8 ((:doc-group . number)
+  (:doc-see . s8))  any ((:doc-group . list) (:doc-see . every))  s8 ((:doc-group . number) (:doc-see . u8))  num? ((:doc-group . type)
+  (:doc-group . number) (:doc-see . nan?) (:doc-group . builtin))  assert ((:doc-group . debug) (:doc-see . assert-fail))  1+ ((:doc-group . number)
+  (:doc-see . 1-))  throw ((:doc-group . error) (:doc-see . catch))  positive? ((:doc-group . number)
+                                                                                (:doc-group . compare))  atan ((:doc-group . math))  *builtins* ((:doc-group . builtin))  remprop ((:doc-group . prop))  cdddar ((:doc-group . list))  set-cdr! ((:doc-group . list)
+  (:doc-group . builtin))  eq? ((:doc-group . compare) (:doc-group . builtin))  io->str ((:doc-group . io))  bound? ((:doc-group . builtin))  odd? ((:doc-group . number)
+  (:doc-see . even?))  list? ((:doc-group . list) (:doc-group . type) (:doc-see . list) (:doc-see . proper-list?))  sym ((:doc-see . sym?))  tanh ((:doc-group . math))  for ((:doc-group . builtin))  tan ((:doc-group . math))  doc-group ((:doc-group . doc))  cdaaar ((:doc-group . list))  bounds-error ((:doc-group . error))  even? ((:doc-group . number)
+  (:doc-see . odd?))  *properties* ((:doc-group . prop))  zero? ((:doc-group . number) (:doc-group . compare))  proper-list? ((:doc-group . list)
+  (:doc-group . type) (:doc-see . list?))  random ((:doc-group . rand))  eval ((:doc-group . vm) (:doc-see . load))  cdaadr ((:doc-group . list))  u32 ((:doc-group . number)
+  (:doc-see . s32))  cons ((:doc-group . list) (:doc-see . cons?) (:doc-see . list) (:doc-group . builtin))  assq ((:doc-group . list)
+  (:doc-see . assoc) (:doc-see . assv))  most-positive-fixnum ((:doc-group . number) (:doc-see . most-negative-fixnum))  vec? ((:doc-group . type)
+  (:doc-group . builtin))  min ((:doc-group . compare) (:doc-see . max))  cddaar ((:doc-group . list))  io? ((:doc-group . io)
+  (:doc-group . type))  eof-object? ((:doc-group . io) (:doc-group . type))  help ((:doc-group . doc))  p32 ((:doc-group . number)
+  (:doc-see . p64) (:doc-see . ptr))  sym-set-doc ((:doc-group . doc))  macrocall? ((:doc-group . syntax)
+                                                                                    (:doc-see . macroexpand-1)
+                                                                                    (:doc-see . macroexpand))  *syntax-environment* ((:doc-group . syntax)
+  (:doc-see . get-syntax) (:doc-see . set-syntax!))  macroexpand ((:doc-group . syntax) (:doc-see . macroexpand-1))  caadr ((:doc-group . list))  defstruct ((:doc-group . struct))  caadar ((:doc-group . list))  buffer ((:doc-group . io))  list-tail ((:doc-group . list)
+  (:doc-see . list-ref))  assoc-list ((:doc-group . list) (:doc-see . assoc))  builtin? ((:doc-group . type)
+  (:doc-see . builtin) (:doc-see . fn?) (:doc-see . closure?) (:doc-group . builtin))  macroexpand-1 ((:doc-group . syntax)
+  (:doc-see . macroexpand))  str ((:doc-group . string))  negative? ((:doc-group . number) (:doc-group . compare))  void ((:doc-see . void?))  assert-fail ((:doc-group . debug)
+  (:doc-see . assert))  1- ((:doc-group . number) (:doc-see . 1+))  equal? ((:doc-group . compare)
+                                                                            (:doc-group . builtin))  cddar ((:doc-group . list))  *interactive* ((:doc-group . vm)
+  (:doc-see . *prompt*))  = ((:doc-group . compare) (:doc-group . number) (:doc-group . builtin))  fn? ((:doc-group . type)
+  (:doc-see . fn) (:doc-see . builtin?) (:doc-see . closure?) (:doc-group . builtin))  caaadr ((:doc-group . list))  make-system-image ((:doc-group . vm))  subseq ((:doc-group . list)
+  (:doc-see . str-sub) (:doc-see . copy-list) (:doc-see . list-tail))  vm-stats ((:doc-group . vm))  ptr ((:doc-group . number)
+  (:doc-see . p32) (:doc-see . p64) (:doc-see . ptr))  caddar ((:doc-group . list))  print-stack-trace ((:doc-group . error)
+  (:doc-see . stacktrace))  cosh ((:doc-group . math))  < ((:doc-group . compare) (:doc-group . builtin))  f32 ((:doc-group . number)
+  (:doc-see . f64))  sin ((:doc-group . math))  > ((:doc-group . compare))  abs ((:doc-group . math)
+                                                                                 (:doc-group . number))  str? ((:doc-group . type)
+  (:doc-see . str))  cons? ((:doc-group . type) (:doc-see . cons) (:doc-see . list?) (:doc-group . builtin))  aset! ((:doc-group . array)
+  (:doc-see . aref) (:doc-group . builtin))  T ((:doc-see))  - ((:doc-group . number) (:doc-group . builtin))  rand ((:doc-group . rand))  copy-list ((:doc-group . list)
+  (:doc-see . list-tail) (:doc-see . subseq))  sinh ((:doc-group . math))  *argv* ((:doc-group . vm)
+                                                                                   (:doc-see . *interactive*))  top-level-exception-handler ((:doc-group . error))  map-int ((:doc-group . list)
+  (:doc-see . iota))  get-syntax ((:doc-group . syntax) (:doc-see . set-syntax!))  ptr? ((:doc-group . type)
+  (:doc-group . number) (:doc-see . ptr))  expt ((:doc-group . math))  gc ((:doc-group . vm) (:doc-see . vm-stats))  lz-unpack ((:doc-group . compress))  log10 ((:doc-group . math))  gensym? ((:doc-group . type)
+  (:doc-see . sym?) (:doc-see . sym))  cdddr ((:doc-group . list))  set-car! ((:doc-group . list)
+                                                                              (:doc-group . builtin))  vec ((:doc-group . array)
+  (:doc-see . vec-alloc) (:doc-see . arr) (:doc-group . builtin))  rune ((:doc-group . string) (:doc-see . rune?))  cadar ((:doc-group . list))  type-error ((:doc-group . error))  file ((:doc-group . io))  cdr ((:doc-group . list)
+  (:doc-group . builtin))  / ((:doc-group . number) (:doc-group . builtin))  separate-doc-from-body ((:doc-group . doc))  rand-u64 ((:doc-group . rand))  cdadar ((:doc-group . list))  sqrt ((:doc-group . math))  lz-pack ((:doc-group . compress))  *prompt* ((:doc-group . vm)
+  (:doc-see . *interactive*))  member ((:doc-group . list) (:doc-see . memq) (:doc-see . memv))  bignum? ((:doc-group . type)
+  (:doc-group . number) (:doc-see . bignum))  memq ((:doc-group . list) (:doc-see . member) (:doc-see . memv))  fixnum ((:doc-group . number)
+  (:doc-see . fixnum?))  f64 ((:doc-group . number) (:doc-see . f32))  exp ((:doc-group . math))  caaaar ((:doc-group . list))  s64 ((:doc-group . number)
+  (:doc-see . u64))  NIL ((:doc-see . T))  assoc ((:doc-group . list) (:doc-see . assoc-list) (:doc-see . assq)
+                                                                      (:doc-see . assv))  + ((:doc-group . number)
+  (:doc-group . builtin))  cadadr ((:doc-group . list))  compare ((:doc-group . compare) (:doc-group . builtin))  error ((:doc-group . error))  print-exception ((:doc-group . error)
+  (:doc-see . *exception-print-level*) (:doc-see . *exception-print-length*))  load ((:doc-group . vm)
+                                                                                     (:doc-see . eval))  keyword? ((:doc-group . type))  aref ((:doc-group . array)
+  (:doc-see . aset!) (:doc-group . builtin))  sym? ((:doc-group . type) (:doc-see . sym) (:doc-see . gensym?)
+                                                                        (:doc-group . builtin))  u64 ((:doc-group . number)
+  (:doc-see . s64))  Instructions ((:doc-group . builtin))  assv ((:doc-group . list) (:doc-see . assoc)
+                                                                                      (:doc-see . assq))  bignum ((:doc-group . number)
+  (:doc-see . bignum?))  eqv? ((:doc-group . compare) (:doc-group . builtin))  list ((:doc-see . list?)
  (:doc-see . p64) (:doc-see . ptr))  f64 ((:doc-group . number) (:doc-see . f32))  io->str ((:doc-group . io))  rand-f32 ((:doc-group . rand))  exp ((:doc-group . math))  bound? ((:doc-group . builtin))  * ((:doc-group . number)
   (:doc-group . builtin))  putprop ((:doc-group . prop) (:doc-see . getprop))  getprop ((:doc-group . prop)
                                                                                         (:doc-see . putprop))  caaadr ((:doc-group . list))  odd? ((:doc-group . number)
--- a/src/system.sl
+++ b/src/system.sl
@@ -738,7 +738,7 @@
     (append- fst lists)
     (cdr fst)))
 
-(def (copy-list l (n NIL))
+(def (copy-list lst (n NIL))
   "Return a copy of the list.
 
    The number of elements to be copied can be limited with the optional
@@ -756,17 +756,32 @@
   :doc-group list
   :doc-see list-tail
   :doc-see subseq
-  (def (copy- last l n)
+  (def (copy- last lst n)
     (and n (= n 0) (return))
-    (unless l (return))
-    (let {[next (cons (car l) NIL)]}
+    (unless lst (return))
+    (let {[next (cons (car lst) NIL)]}
       (set-cdr! last next)
-      (copy- next (cdr l) (and n (1- n)))))
+      (copy- next (cdr lst) (and n (1- n)))))
   (let {[fst (cons NIL NIL)]}
-    (copy- fst l n)
+    (copy- fst lst n)
     (cdr fst)))
 
 (def (subseq seq start (end NIL))
+  «Return a bounded part of a sequence.
+
+   The returned value is always a copy of the subsequence of the
+   original.  It is an error if either `start` or `end` (if specified)
+   are out of bounds.
+
+   Examples:
+
+       (subseq "hello" 1 2)  → "e"
+       (subseq '(1 2 3) 0 2) → (1 2)
+       (subseq #(a b c) 2)   → #(c)»
+  :doc-group list
+  :doc-see str-sub
+  :doc-see copy-list
+  :doc-see list-tail
   (unless (<= start end)
     (arg-error "start <= end: " start " <= " end))
   (def (subseq-l seq n)