Hash join: Difference between revisions

→‎{{header|LFE}}: Added LFE implementation
m (Stubbed entry for LFE)
(→‎{{header|LFE}}: Added LFE implementation)
Line 666:
 
=={{header|LFE}}==
<lang lisp>
(defun hash (column table)
(lists:foldl
(lambda (x acc)
(orddict:append(proplists:get_value column x) x acc))
'()
table))
 
(defun hash-join (table-1 col-1 table-2 col-2)
(let ((hashed (hash col-1 table-1)))
(lc ((<- r table-2))
(lc ((<- s (proplists:get_value
(proplists:get_value col-2 r)
hashed)))
(orddict:merge
(lambda (k v1 v2) v2)
(lists:sort r)
(lists:sort s))))))
</lang>
 
Output in LFE REPL:
 
<lang lisp>
> (hash-join ss 'name rs 'name)
(((#(age 27) #(name "Jonah") #(nemesis "Whales")))
((#(age 27) #(name "Jonah") #(nemesis "Spiders")))
((#(age 18) #(name "Alan") #(nemesis "Ghosts"))
(#(age 28) #(name "Alan") #(nemesis "Ghosts")))
((#(age 18) #(name "Alan") #(nemesis "Zombies"))
(#(age 28) #(name "Alan") #(nemesis "Zombies")))
((#(age 28) #(name "Glory") #(nemesis "Buffy"))))
</lang>
 
=={{header|Mathematica}}==
Anonymous user