Contents    Page-10    Prev    Next    Page+10    Index   

Mapreduce in Lisp


(defun mapreduce (mapfn reducefn lst)
  (let (db keylist)
    (dolist (item lst)
      (dolist (resitem (funcall mapfn item))
        (or (setq keylist
                  (assoc (first resitem) db
                         :test 'equal))
            (push (setq keylist
                        (list (first resitem)))
                  db))
        (push (second resitem) (rest keylist)) ) )
    (mapcar #'(lambda (keylist)
                (list (first keylist)
                      (reduce reducefn
                              (rest keylist))))
            db) ))

>(mapreduce 'identity '+ '(((a 3) (b 2) (c 1))
                           ((b 7) (d 3) (c 5))))

((D 3) (C 6) (B 9) (A 3))