util.fnl 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. ; standard lib stuff
  2. (fn identity [x] x)
  3. (fn inc [n] (+ n 1))
  4. (fn dec [n] (- n 1))
  5. (fn nil? [x] (= x nil))
  6. (fn true? [x] (if x true false))
  7. (fn empty? [x] (= 0 (# x)))
  8. (fn first [col] (. col 1))
  9. (fn last [col] (. col (# col)))
  10. (fn rest [col]
  11. (let [a []]
  12. (if (< (# col) 2) a
  13. (do (for [i 2 (# col)]
  14. (tset a (dec i) (. col i))) a))))
  15. (fn map [f col]
  16. (let [a []]
  17. (each [i v (pairs col)]
  18. (tset a i (f v))) a))
  19. (fn reduce [f val col]
  20. (if (empty? col) val
  21. (reduce f (f val (first col)) (rest col))))
  22. (fn add [m v] (table.insert m v))
  23. (fn filter [f col]
  24. (let [a []]
  25. (each [i v (pairs col)]
  26. (if (f v) (add a v))) a))
  27. (fn every? [f col]
  28. (reduce (fn [a b] (and (f a) (f b))) (first col) (rest col)))
  29. (fn int [n] (math.floor n))
  30. (fn copy [o]
  31. (if (= (type o) "table")
  32. (let [t {}]
  33. (each [k v (pairs o)]
  34. (tset t k (copy v))) t) o))
  35. (fn merge [a b]
  36. (let [c (copy a)]
  37. (each [k v (pairs b)]
  38. (tset c k (copy v))) c))
  39. (fn update [col k f] (tset col k (f (. col k))) col)
  40. (fn keys [col]
  41. (let [res []]
  42. (each [k v (pairs col)] (add res k)) res))
  43. (fn has-key? [m k] (not (= nil (. m k))))
  44. (fn vals [col]
  45. (let [res []]
  46. (each [k v (pairs col)] (add res v)) res))
  47. (fn get [col k nf]
  48. (or (. col k) nf))
  49. ;remove first matching value, is this what pico8 has?
  50. (fn remove [col o]
  51. (var found false)
  52. (each [i v (ipairs col)]
  53. (if (= v o)
  54. (when (not found)
  55. (set found true)
  56. (table.remove col i)))) col)
  57. (fn tableprint [o]
  58. (if
  59. (= (type o) "function")
  60. "<fn>"
  61. (= (type o) "table")
  62. (do
  63. (var res "{")
  64. (each [k v (pairs o)]
  65. (set res (.. res k ": " (tableprint v) ", ")))
  66. (set res (.. res "}")) res)
  67. (= o true) "true"
  68. (= o false) "false"
  69. (= o nil) "nil"
  70. (.. o)))
  71. ; game stuff
  72. (fn chance [n] (<= (math.random 100) n))
  73. (fn ->view [v] (vadd (vsub v (vadd (vmul player.pos 8) player.offset)) (point 64 64)))
  74. (fn rand [n] (math.random n))
  75. (fn rand-nth [col] (. col (rand (# col))))
  76. (fn rand-point [n] (point (math.random (- n) n) (math.random (- n) n)))
  77. (fn roll-dice [count size]
  78. (var sum 0)
  79. (for [i 1 count]
  80. (set sum (+ sum (math.random size))))
  81. sum)
  82. (fn roll [col] (roll-dice (. col 1) (. col 2)))