From 5f4a09583029f98888ca4ff1169434d1df550e74 Mon Sep 17 00:00:00 2001 From: Vasilij Schneidermann Date: Sun, 23 Oct 2016 20:39:29 +0200 Subject: [PATCH] Fix assoc --- pil/core.l | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/pil/core.l b/pil/core.l index ea99f614..30bb6974 100644 --- a/pil/core.l +++ b/pil/core.l @@ -50,6 +50,18 @@ (for (L List L (cddr L)) (link (cons (car L) (cadr L))) ) ) ) +(de join (List) + (mapcan '((X) (list (car X) (cdr X))) List) ) + +(de MAL-assoc @ + (let (Map (next) Args (rest)) + (MAL-map + (append Args + (join + (filter '((X) (not (find '((Y) (MAL-= (car Y) (car X))) + (chunk Args) ) ) ) + (chunk (MAL-value Map)) ) ) ) ) ) ) + (de MAL-dissoc @ (let (Map (next) Args (rest)) (MAL-map @@ -136,7 +148,7 @@ (vector . `(MAL-fn '(@ (MAL-vector (rest))))) (hash-map . `(MAL-fn '(@ (MAL-map (rest))))) - (assoc . `(MAL-fn '(@ (let (Map (next) Args (rest)) (MAL-map (append (MAL-value Map) Args)))))) + (assoc . `(MAL-fn MAL-assoc)) (dissoc . `(MAL-fn MAL-dissoc)) (get . `(MAL-fn '((Map Key) (or (and (<> (MAL-type Map) 'nil) (cdr (find '((X) (MAL-= (car X) Key)) (chunk (MAL-value Map))))) *MAL-nil)))) (contains? . `(MAL-fn '((Map Key) (if (find '((X) (MAL-= (car X) Key)) (chunk (MAL-value Map))) *MAL-true *MAL-false))))