about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2022-03-27 11:42:19 -0700
committerKartik K. Agaram <vc@akkartik.com>2022-03-27 11:42:19 -0700
commitb56590ddc986ab07ce105fef6c5ab8d48c8599cd (patch)
tree93bede7fc152acfd44821aa3a96e16bd4d145647
parent14446eefc41096096228bdc270dd2e3c74337507 (diff)
downloadteliva-b56590ddc986ab07ce105fef6c5ab8d48c8599cd.tar.gz
some more reorg of the standard library
Now life.tlv and gemini.tlv are also minimizing how much of the standard
library they pull in, just to be easy to read.
-rw-r--r--anagrams.tlv46
-rw-r--r--break.tlv46
-rw-r--r--gemini.tlv252
-rw-r--r--graphviz.tlv46
-rw-r--r--life.tlv282
-rw-r--r--template.tlv46
-rw-r--r--toot-toot.tlv46
-rw-r--r--zet.tlv46
8 files changed, 138 insertions, 672 deletions
diff --git a/anagrams.tlv b/anagrams.tlv
index e0bc818..c1a7a4d 100644
--- a/anagrams.tlv
+++ b/anagrams.tlv
@@ -149,6 +149,29 @@
     >  return tostring(x)
     >end
 - __teliva_timestamp: original
+  find_index:
+    >function find_index(arr, x)
+    >  for n, y in ipairs(arr) do
+    >    if x == y then
+    >      return n
+    >    end
+    >  end
+    >end
+- __teliva_timestamp: original
+  trim:
+    >function trim(s)
+    >  return s:gsub('^%s*', ''):gsub('%s*$', '')
+    >end
+- __teliva_timestamp: original
+  split:
+    >function split(s, d)
+    >  result = {}
+    >  for match in (s..d):gmatch("(.-)"..d) do
+    >    table.insert(result, match);
+    >  end
+    >  return result
+    >end
+- __teliva_timestamp: original
   map:
     >-- only for arrays
     >function map(l, f)
@@ -192,29 +215,6 @@
     >  return result
     >end
 - __teliva_timestamp: original
-  find_index:
-    >function find_index(arr, x)
-    >  for n, y in ipairs(arr) do
-    >    if x == y then
-    >      return n
-    >    end
-    >  end
-    >end
-- __teliva_timestamp: original
-  trim:
-    >function trim(s)
-    >  return s:gsub('^%s*', ''):gsub('%s*$', '')
-    >end
-- __teliva_timestamp: original
-  split:
-    >function split(s, d)
-    >  result = {}
-    >  for match in (s..d):gmatch("(.-)"..d) do
-    >    table.insert(result, match);
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
   sort_letters:
     >function sort_letters(s)
     >  tmp = {}
diff --git a/break.tlv b/break.tlv
index 8b2e9b1..bc3806a 100644
--- a/break.tlv
+++ b/break.tlv
@@ -149,6 +149,29 @@
     >  return tostring(x)
     >end
 - __teliva_timestamp: original
+  find_index:
+    >function find_index(arr, x)
+    >  for n, y in ipairs(arr) do
+    >    if x == y then
+    >      return n
+    >    end
+    >  end
+    >end
+- __teliva_timestamp: original
+  trim:
+    >function trim(s)
+    >  return s:gsub('^%s*', ''):gsub('%s*$', '')
+    >end
+- __teliva_timestamp: original
+  split:
+    >function split(s, d)
+    >  result = {}
+    >  for match in (s..d):gmatch("(.-)"..d) do
+    >    table.insert(result, match);
+    >  end
+    >  return result
+    >end
+- __teliva_timestamp: original
   map:
     >-- only for arrays
     >function map(l, f)
@@ -192,29 +215,6 @@
     >  return result
     >end
 - __teliva_timestamp: original
-  find_index:
-    >function find_index(arr, x)
-    >  for n, y in ipairs(arr) do
-    >    if x == y then
-    >      return n
-    >    end
-    >  end
-    >end
-- __teliva_timestamp: original
-  trim:
-    >function trim(s)
-    >  return s:gsub('^%s*', ''):gsub('%s*$', '')
-    >end
-- __teliva_timestamp: original
-  split:
-    >function split(s, d)
-    >  result = {}
-    >  for match in (s..d):gmatch("(.-)"..d) do
-    >    table.insert(result, match);
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
   sort_letters:
     >function sort_letters(s)
     >  tmp = {}
diff --git a/gemini.tlv b/gemini.tlv
index 15e16f8..72fc387 100644
--- a/gemini.tlv
+++ b/gemini.tlv
@@ -149,49 +149,6 @@
     >  return tostring(x)
     >end
 - __teliva_timestamp: original
-  map:
-    >-- only for arrays
-    >function map(l, f)
-    >  result = {}
-    >  for _, x in ipairs(l) do
-    >    table.insert(result, f(x))
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
-  reduce:
-    >-- only for arrays
-    >function reduce(l, f, init)
-    >  result = init
-    >  for _, x in ipairs(l) do
-    >    result = f(result, x)
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
-  filter:
-    >function filter(h, f)
-    >  result = {}
-    >  for k, v in pairs(h) do
-    >    if f(k, v) then
-    >      result[k] = v
-    >    end
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
-  ifilter:
-    >-- only for arrays
-    >function ifilter(l, f)
-    >  result = {}
-    >  for _, x in ipairs(l) do
-    >    if f(x) then
-    >      table.insert(result, x)
-    >    end
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
   find_index:
     >function find_index(arr, x)
     >  for n, y in ipairs(arr) do
@@ -215,159 +172,6 @@
     >  return result
     >end
 - __teliva_timestamp: original
-  sort_letters:
-    >function sort_letters(s)
-    >  tmp = {}
-    >  for i=1,#s do
-    >    table.insert(tmp, s[i])
-    >  end
-    >  table.sort(tmp)
-    >  local result = ''
-    >  for _, c in pairs(tmp) do
-    >    result = result..c
-    >  end
-    >  return result
-    >end
-    >
-    >function test_sort_letters(s)
-    >  check_eq(sort_letters(''), '', 'test_sort_letters: empty')
-    >  check_eq(sort_letters('ba'), 'ab', 'test_sort_letters: non-empty')
-    >  check_eq(sort_letters('abba'), 'aabb', 'test_sort_letters: duplicates')
-    >end
-- __teliva_timestamp: original
-  count_letters:
-    >-- TODO: handle unicode
-    >function count_letters(s)
-    >  local result = {}
-    >  for i=1,s:len() do
-    >    local c = s[i]
-    >    if result[c] == nil then
-    >      result[c] = 1
-    >    else
-    >      result[c] = result[c] + 1
-    >    end
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
-  count:
-    >-- turn an array of elements into a map from elements to their frequency
-    >-- analogous to count_letters for non-strings
-    >function count(a)
-    >  local result = {}
-    >  for i, v in ipairs(a) do
-    >    if result[v] == nil then
-    >      result[v] = 1
-    >    else
-    >      result[v] = result[v] + 1
-    >    end
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
-  union:
-    >function union(a, b)
-    >  for k, v in pairs(b) do
-    >    a[k] = v
-    >  end
-    >  return a
-    >end
-- __teliva_timestamp: original
-  subtract:
-    >-- set subtraction
-    >function subtract(a, b)
-    >  for k, v in pairs(b) do
-    >    a[k] = nil
-    >  end
-    >  return a
-    >end
-- __teliva_timestamp: original
-  all:
-    >-- universal quantifier on sets
-    >function all(s, f)
-    >  for k, v in pairs(s) do
-    >    if not f(k, v) then
-    >      return false
-    >    end
-    >  end
-    >  return true
-    >end
-- __teliva_timestamp: original
-  to_array:
-    >-- turn a set into an array
-    >-- drops values
-    >function to_array(h)
-    >  local result = {}
-    >  for k, _ in pairs(h) do
-    >    table.insert(result, k)
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
-  append:
-    >-- concatenate list 'elems' into 'l', modifying 'l' in the process
-    >function append(l, elems)
-    >  for i=1,#elems do
-    >    table.insert(l, elems[i])
-    >  end
-    >end
-- __teliva_timestamp: original
-  prepend:
-    >-- concatenate list 'elems' into the start of 'l', modifying 'l' in the process
-    >function prepend(l, elems)
-    >  for i=1,#elems do
-    >    table.insert(l, i, elems[i])
-    >  end
-    >end
-- __teliva_timestamp: original
-  all_but:
-    >function all_but(x, idx)
-    >  if type(x) == 'table' then
-    >    local result = {}
-    >    for i, elem in ipairs(x) do
-    >      if i ~= idx then
-    >        table.insert(result,elem)
-    >      end
-    >    end
-    >    return result
-    >  elseif type(x) == 'string' then
-    >    if idx < 1 then return x:sub(1) end
-    >    return x:sub(1, idx-1) .. x:sub(idx+1)
-    >  else
-    >    error('all_but: unsupported type '..type(x))
-    >  end
-    >end
-    >
-    >function test_all_but()
-    >  check_eq(all_but('', 0), '', 'all_but: empty')
-    >  check_eq(all_but('abc', 0), 'abc', 'all_but: invalid low index')
-    >  check_eq(all_but('abc', 4), 'abc', 'all_but: invalid high index')
-    >  check_eq(all_but('abc', 1), 'bc', 'all_but: first index')
-    >  check_eq(all_but('abc', 3), 'ab', 'all_but: final index')
-    >  check_eq(all_but('abc', 2), 'ac', 'all_but: middle index')
-    >end
-- __teliva_timestamp: original
-  set:
-    >function set(l)
-    >  local result = {}
-    >  for i, elem in ipairs(l) do
-    >    result[elem] = true
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
-  set_eq:
-    >function set_eq(l1, l2)
-    >  return eq(set(l1), set(l2))
-    >end
-    >
-    >function test_set_eq()
-    >  check(set_eq({1}, {1}), 'set_eq: identical')
-    >  check(not set_eq({1, 2}, {1, 3}), 'set_eq: different')
-    >  check(set_eq({1, 2}, {2, 1}), 'set_eq: order')
-    >  check(set_eq({1, 2, 2}, {2, 1}), 'set_eq: duplicates')
-    >end
-- __teliva_timestamp: original
   clear:
     >function clear(lines)
     >  while #lines > 0 do
@@ -375,62 +179,6 @@
     >  end
     >end
 - __teliva_timestamp: original
-  zap:
-    >function zap(target, src)
-    >  clear(target)
-    >  append(target, src)
-    >end
-- __teliva_timestamp: original
-  mfactorial:
-    >-- memoized version of factorial
-    >-- doesn't memoize recursive calls, but may be good enough
-    >mfactorial = memo1(factorial)
-- __teliva_timestamp: original
-  factorial:
-    >function factorial(n)
-    >  local result = 1
-    >  for i=1,n do
-    >    result = result*i
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
-  memo1:
-    >-- a higher-order function that takes a function of a single arg
-    >-- (that never returns nil)
-    >-- and returns a memoized version of it
-    >function memo1(f)
-    >  local memo = {}
-    >  return function(x)
-    >    if memo[x] == nil then
-    >      memo[x] = f(x)
-    >    end
-    >    return memo[x]
-    >  end
-    >end
-    >
-    >-- mfactorial doesn't seem noticeably faster
-    >function test_memo1()
-    >  for i=0,30 do
-    >    check_eq(mfactorial(i), factorial(i), 'memo1 over factorial: '..str(i))
-    >  end
-    >end
-- __teliva_timestamp: original
-  num_permutations:
-    >-- number of permutations of n distinct objects, taken r at a time
-    >function num_permutations(n, r)
-    >  return factorial(n)/factorial(n-r)
-    >end
-    >
-    >-- mfactorial doesn't seem noticeably faster
-    >function test_memo1()
-    >  for i=0,30 do
-    >    for j=0,i do
-    >      check_eq(num_permutations(i, j), mfactorial(i)/mfactorial(i-j), 'num_permutations memoizes: '..str(i)..'P'..str(j))
-    >    end
-    >  end
-    >end
-- __teliva_timestamp: original
   Window:
     >Window = curses.stdscr()
 - __teliva_timestamp: original
diff --git a/graphviz.tlv b/graphviz.tlv
index bed0808..9143d83 100644
--- a/graphviz.tlv
+++ b/graphviz.tlv
@@ -149,6 +149,29 @@
     >  return tostring(x)
     >end
 - __teliva_timestamp: original
+  find_index:
+    >function find_index(arr, x)
+    >  for n, y in ipairs(arr) do
+    >    if x == y then
+    >      return n
+    >    end
+    >  end
+    >end
+- __teliva_timestamp: original
+  trim:
+    >function trim(s)
+    >  return s:gsub('^%s*', ''):gsub('%s*$', '')
+    >end
+- __teliva_timestamp: original
+  split:
+    >function split(s, d)
+    >  result = {}
+    >  for match in (s..d):gmatch("(.-)"..d) do
+    >    table.insert(result, match);
+    >  end
+    >  return result
+    >end
+- __teliva_timestamp: original
   map:
     >-- only for arrays
     >function map(l, f)
@@ -192,29 +215,6 @@
     >  return result
     >end
 - __teliva_timestamp: original
-  find_index:
-    >function find_index(arr, x)
-    >  for n, y in ipairs(arr) do
-    >    if x == y then
-    >      return n
-    >    end
-    >  end
-    >end
-- __teliva_timestamp: original
-  trim:
-    >function trim(s)
-    >  return s:gsub('^%s*', ''):gsub('%s*$', '')
-    >end
-- __teliva_timestamp: original
-  split:
-    >function split(s, d)
-    >  result = {}
-    >  for match in (s..d):gmatch("(.-)"..d) do
-    >    table.insert(result, match);
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
   sort_letters:
     >function sort_letters(s)
     >  tmp = {}
diff --git a/life.tlv b/life.tlv
index 03307f5..8b3cc67 100644
--- a/life.tlv
+++ b/life.tlv
@@ -149,288 +149,6 @@
     >  return tostring(x)
     >end
 - __teliva_timestamp: original
-  map:
-    >-- only for arrays
-    >function map(l, f)
-    >  result = {}
-    >  for _, x in ipairs(l) do
-    >    table.insert(result, f(x))
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
-  reduce:
-    >-- only for arrays
-    >function reduce(l, f, init)
-    >  result = init
-    >  for _, x in ipairs(l) do
-    >    result = f(result, x)
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
-  filter:
-    >function filter(h, f)
-    >  result = {}
-    >  for k, v in pairs(h) do
-    >    if f(k, v) then
-    >      result[k] = v
-    >    end
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
-  ifilter:
-    >-- only for arrays
-    >function ifilter(l, f)
-    >  result = {}
-    >  for _, x in ipairs(l) do
-    >    if f(x) then
-    >      table.insert(result, x)
-    >    end
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
-  find_index:
-    >function find_index(arr, x)
-    >  for n, y in ipairs(arr) do
-    >    if x == y then
-    >      return n
-    >    end
-    >  end
-    >end
-- __teliva_timestamp: original
-  trim:
-    >function trim(s)
-    >  return s:gsub('^%s*', ''):gsub('%s*$', '')
-    >end
-- __teliva_timestamp: original
-  split:
-    >function split(s, d)
-    >  result = {}
-    >  for match in (s..d):gmatch("(.-)"..d) do
-    >    table.insert(result, match);
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
-  sort_letters:
-    >function sort_letters(s)
-    >  tmp = {}
-    >  for i=1,#s do
-    >    table.insert(tmp, s[i])
-    >  end
-    >  table.sort(tmp)
-    >  local result = ''
-    >  for _, c in pairs(tmp) do
-    >    result = result..c
-    >  end
-    >  return result
-    >end
-    >
-    >function test_sort_letters(s)
-    >  check_eq(sort_letters(''), '', 'test_sort_letters: empty')
-    >  check_eq(sort_letters('ba'), 'ab', 'test_sort_letters: non-empty')
-    >  check_eq(sort_letters('abba'), 'aabb', 'test_sort_letters: duplicates')
-    >end
-- __teliva_timestamp: original
-  count_letters:
-    >-- TODO: handle unicode
-    >function count_letters(s)
-    >  local result = {}
-    >  for i=1,s:len() do
-    >    local c = s[i]
-    >    if result[c] == nil then
-    >      result[c] = 1
-    >    else
-    >      result[c] = result[c] + 1
-    >    end
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
-  count:
-    >-- turn an array of elements into a map from elements to their frequency
-    >-- analogous to count_letters for non-strings
-    >function count(a)
-    >  local result = {}
-    >  for i, v in ipairs(a) do
-    >    if result[v] == nil then
-    >      result[v] = 1
-    >    else
-    >      result[v] = result[v] + 1
-    >    end
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
-  union:
-    >function union(a, b)
-    >  for k, v in pairs(b) do
-    >    a[k] = v
-    >  end
-    >  return a
-    >end
-- __teliva_timestamp: original
-  subtract:
-    >-- set subtraction
-    >function subtract(a, b)
-    >  for k, v in pairs(b) do
-    >    a[k] = nil
-    >  end
-    >  return a
-    >end
-- __teliva_timestamp: original
-  all:
-    >-- universal quantifier on sets
-    >function all(s, f)
-    >  for k, v in pairs(s) do
-    >    if not f(k, v) then
-    >      return false
-    >    end
-    >  end
-    >  return true
-    >end
-- __teliva_timestamp: original
-  to_array:
-    >-- turn a set into an array
-    >-- drops values
-    >function to_array(h)
-    >  local result = {}
-    >  for k, _ in pairs(h) do
-    >    table.insert(result, k)
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
-  append:
-    >-- concatenate list 'elems' into 'l', modifying 'l' in the process
-    >function append(l, elems)
-    >  for i=1,#elems do
-    >    table.insert(l, elems[i])
-    >  end
-    >end
-- __teliva_timestamp: original
-  prepend:
-    >-- concatenate list 'elems' into the start of 'l', modifying 'l' in the process
-    >function prepend(l, elems)
-    >  for i=1,#elems do
-    >    table.insert(l, i, elems[i])
-    >  end
-    >end
-- __teliva_timestamp: original
-  all_but:
-    >function all_but(x, idx)
-    >  if type(x) == 'table' then
-    >    local result = {}
-    >    for i, elem in ipairs(x) do
-    >      if i ~= idx then
-    >        table.insert(result,elem)
-    >      end
-    >    end
-    >    return result
-    >  elseif type(x) == 'string' then
-    >    if idx < 1 then return x:sub(1) end
-    >    return x:sub(1, idx-1) .. x:sub(idx+1)
-    >  else
-    >    error('all_but: unsupported type '..type(x))
-    >  end
-    >end
-    >
-    >function test_all_but()
-    >  check_eq(all_but('', 0), '', 'all_but: empty')
-    >  check_eq(all_but('abc', 0), 'abc', 'all_but: invalid low index')
-    >  check_eq(all_but('abc', 4), 'abc', 'all_but: invalid high index')
-    >  check_eq(all_but('abc', 1), 'bc', 'all_but: first index')
-    >  check_eq(all_but('abc', 3), 'ab', 'all_but: final index')
-    >  check_eq(all_but('abc', 2), 'ac', 'all_but: middle index')
-    >end
-- __teliva_timestamp: original
-  set:
-    >function set(l)
-    >  local result = {}
-    >  for i, elem in ipairs(l) do
-    >    result[elem] = true
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
-  set_eq:
-    >function set_eq(l1, l2)
-    >  return eq(set(l1), set(l2))
-    >end
-    >
-    >function test_set_eq()
-    >  check(set_eq({1}, {1}), 'set_eq: identical')
-    >  check(not set_eq({1, 2}, {1, 3}), 'set_eq: different')
-    >  check(set_eq({1, 2}, {2, 1}), 'set_eq: order')
-    >  check(set_eq({1, 2, 2}, {2, 1}), 'set_eq: duplicates')
-    >end
-- __teliva_timestamp: original
-  clear:
-    >function clear(lines)
-    >  while #lines > 0 do
-    >    table.remove(lines)
-    >  end
-    >end
-- __teliva_timestamp: original
-  zap:
-    >function zap(target, src)
-    >  clear(target)
-    >  append(target, src)
-    >end
-- __teliva_timestamp: original
-  mfactorial:
-    >-- memoized version of factorial
-    >-- doesn't memoize recursive calls, but may be good enough
-    >mfactorial = memo1(factorial)
-- __teliva_timestamp: original
-  factorial:
-    >function factorial(n)
-    >  local result = 1
-    >  for i=1,n do
-    >    result = result*i
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
-  memo1:
-    >-- a higher-order function that takes a function of a single arg
-    >-- (that never returns nil)
-    >-- and returns a memoized version of it
-    >function memo1(f)
-    >  local memo = {}
-    >  return function(x)
-    >    if memo[x] == nil then
-    >      memo[x] = f(x)
-    >    end
-    >    return memo[x]
-    >  end
-    >end
-    >
-    >-- mfactorial doesn't seem noticeably faster
-    >function test_memo1()
-    >  for i=0,30 do
-    >    check_eq(mfactorial(i), factorial(i), 'memo1 over factorial: '..str(i))
-    >  end
-    >end
-- __teliva_timestamp: original
-  num_permutations:
-    >-- number of permutations of n distinct objects, taken r at a time
-    >function num_permutations(n, r)
-    >  return factorial(n)/factorial(n-r)
-    >end
-    >
-    >-- mfactorial doesn't seem noticeably faster
-    >function test_memo1()
-    >  for i=0,30 do
-    >    for j=0,i do
-    >      check_eq(num_permutations(i, j), mfactorial(i)/mfactorial(i-j), 'num_permutations memoizes: '..str(i)..'P'..str(j))
-    >    end
-    >  end
-    >end
-- __teliva_timestamp: original
   menu:
     >-- To show app-specific hotkeys in the menu bar, add hotkey/command
     >-- arrays of strings to the menu array.
diff --git a/template.tlv b/template.tlv
index bf092d0..0dd5a04 100644
--- a/template.tlv
+++ b/template.tlv
@@ -149,6 +149,29 @@
     >  return tostring(x)
     >end
 - __teliva_timestamp: original
+  find_index:
+    >function find_index(arr, x)
+    >  for n, y in ipairs(arr) do
+    >    if x == y then
+    >      return n
+    >    end
+    >  end
+    >end
+- __teliva_timestamp: original
+  trim:
+    >function trim(s)
+    >  return s:gsub('^%s*', ''):gsub('%s*$', '')
+    >end
+- __teliva_timestamp: original
+  split:
+    >function split(s, d)
+    >  result = {}
+    >  for match in (s..d):gmatch("(.-)"..d) do
+    >    table.insert(result, match);
+    >  end
+    >  return result
+    >end
+- __teliva_timestamp: original
   map:
     >-- only for arrays
     >function map(l, f)
@@ -192,29 +215,6 @@
     >  return result
     >end
 - __teliva_timestamp: original
-  find_index:
-    >function find_index(arr, x)
-    >  for n, y in ipairs(arr) do
-    >    if x == y then
-    >      return n
-    >    end
-    >  end
-    >end
-- __teliva_timestamp: original
-  trim:
-    >function trim(s)
-    >  return s:gsub('^%s*', ''):gsub('%s*$', '')
-    >end
-- __teliva_timestamp: original
-  split:
-    >function split(s, d)
-    >  result = {}
-    >  for match in (s..d):gmatch("(.-)"..d) do
-    >    table.insert(result, match);
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
   sort_letters:
     >function sort_letters(s)
     >  tmp = {}
diff --git a/toot-toot.tlv b/toot-toot.tlv
index bb5ea56..0e524db 100644
--- a/toot-toot.tlv
+++ b/toot-toot.tlv
@@ -149,6 +149,29 @@
     >  return tostring(x)
     >end
 - __teliva_timestamp: original
+  find_index:
+    >function find_index(arr, x)
+    >  for n, y in ipairs(arr) do
+    >    if x == y then
+    >      return n
+    >    end
+    >  end
+    >end
+- __teliva_timestamp: original
+  trim:
+    >function trim(s)
+    >  return s:gsub('^%s*', ''):gsub('%s*$', '')
+    >end
+- __teliva_timestamp: original
+  split:
+    >function split(s, d)
+    >  result = {}
+    >  for match in (s..d):gmatch("(.-)"..d) do
+    >    table.insert(result, match);
+    >  end
+    >  return result
+    >end
+- __teliva_timestamp: original
   map:
     >-- only for arrays
     >function map(l, f)
@@ -192,29 +215,6 @@
     >  return result
     >end
 - __teliva_timestamp: original
-  find_index:
-    >function find_index(arr, x)
-    >  for n, y in ipairs(arr) do
-    >    if x == y then
-    >      return n
-    >    end
-    >  end
-    >end
-- __teliva_timestamp: original
-  trim:
-    >function trim(s)
-    >  return s:gsub('^%s*', ''):gsub('%s*$', '')
-    >end
-- __teliva_timestamp: original
-  split:
-    >function split(s, d)
-    >  result = {}
-    >  for match in (s..d):gmatch("(.-)"..d) do
-    >    table.insert(result, match);
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
   sort_letters:
     >function sort_letters(s)
     >  tmp = {}
diff --git a/zet.tlv b/zet.tlv
index 9f81dee..825ecbd 100644
--- a/zet.tlv
+++ b/zet.tlv
@@ -149,6 +149,29 @@
     >  return tostring(x)
     >end
 - __teliva_timestamp: original
+  find_index:
+    >function find_index(arr, x)
+    >  for n, y in ipairs(arr) do
+    >    if x == y then
+    >      return n
+    >    end
+    >  end
+    >end
+- __teliva_timestamp: original
+  trim:
+    >function trim(s)
+    >  return s:gsub('^%s*', ''):gsub('%s*$', '')
+    >end
+- __teliva_timestamp: original
+  split:
+    >function split(s, d)
+    >  result = {}
+    >  for match in (s..d):gmatch("(.-)"..d) do
+    >    table.insert(result, match);
+    >  end
+    >  return result
+    >end
+- __teliva_timestamp: original
   map:
     >-- only for arrays
     >function map(l, f)
@@ -192,29 +215,6 @@
     >  return result
     >end
 - __teliva_timestamp: original
-  find_index:
-    >function find_index(arr, x)
-    >  for n, y in ipairs(arr) do
-    >    if x == y then
-    >      return n
-    >    end
-    >  end
-    >end
-- __teliva_timestamp: original
-  trim:
-    >function trim(s)
-    >  return s:gsub('^%s*', ''):gsub('%s*$', '')
-    >end
-- __teliva_timestamp: original
-  split:
-    >function split(s, d)
-    >  result = {}
-    >  for match in (s..d):gmatch("(.-)"..d) do
-    >    table.insert(result, match);
-    >  end
-    >  return result
-    >end
-- __teliva_timestamp: original
   sort_letters:
     >function sort_letters(s)
     >  tmp = {}