Hash join: Difference between revisions

Content added Content deleted
mNo edit summary
(Update emacs lisp)
Line 965:
<syntaxhighlight lang="lisp">
(defun make-multi-map (rows)
(let ((map1multi-map '()nil))
(defun place_line (cl-loop for row) in rows do
(let* ((name (car row)))
(ifname-list (assoc name map1multi-map)))
(letif ((rcname-list (assoc name map1)))
(setcdrnconc (nthcdr (1- (length rcname-list)) rc-list) (list row)) )
(progn
(add-to-list 'map1multi-map (list name row) 't) ) ) ) )
(mapcar 'place_line rows)
map1 multi-map) )
 
(defun join-tables (table1 table2)
(let ((multi-map (make-multi-map table2))
(result-table '()))
(cl-loop for row in table1 do
(let ((multi-rc (assoc (cdr row) multi-map)))
for row in table1 do
(prognwhen multi-rc
(cl-loop for (let ((multi-rcline (associn (cdr row) multi-map))rc) do
(add-to-list 'result-table
(when multi-rc
(cl-looplist for(car row) (cdr row) (car multi-line in) (cdr multi-rcline)) do
(add-to-list 'result-table (list row multi-line) 't))))))
result-table))
 
 
(let ((table1 '((27 . "Jonah")
Line 998 ⟶ 997:
("Alan" . "Zombies")
("Glory" . "Buffy"))))
(message "%s" (join-tables table1 table2)) )
</syntaxhighlight>