RosettaCodeData/Task/Associative-array-Merging/NewLISP/associative-array-merging-1.l

28 lines
656 B
Common Lisp

(setq data1 '("name" "Rocket Skates"
"price" 12.75
"color" "yellow"))
(setq data2 '("price" 15.25
"color" "red"
"year" 1974))
(define (list->alist lst) (explode lst 2))
(macro (aset! Alist Key Val)
(local (E-Message)
(unless
(catch
(setf (assoc Key Alist) (list ($it 0) Val))
'E-Message)
(setf Alist (cons (list Key Val) Alist)))))
(define (foo list1 list2)
(let (out (list->alist list1))
(dolist (a (list->alist list2))
(aset! out (a 0) (string (a 1))))
(println out "\n")
(dolist (a out)
(println (format "%-5s %s" a)))))
(foo data1 data2)