about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--shell/data.limg13
1 files changed, 13 insertions, 0 deletions
diff --git a/shell/data.limg b/shell/data.limg
index 0c46da98..fcc7a1ba 100644
--- a/shell/data.limg
+++ b/shell/data.limg
@@ -101,6 +101,19 @@
       if (f (car xs))
         (cons (car xs) rest)
         rest])
+    (alist? . [def (alist? x)
+  (and (cons? x)
+       (cons? (car x)))])
+    (assoc . [def (assoc alist key)
+  if (no alist)
+    ()
+    if (key = (caar alist))
+      (car alist)
+      (assoc (cdr alist) key)])
+    (get . [def (get alist key)
+  aif (assoc alist key)
+    (cdr it)
+    ()])
     (++ . [mac (++ var) `(set ,var (,var + 1))])
     (+= . [mac (var += inc)
   `(set ,var (,var + ,inc))])