1) just define function as usual: {def add {lambda {:a :b :c} {+ :a :b :c}}} -> add 2) and use it: {add 1 2 3} -> 6 {{add 1} 2 3} -> 6 {{add 1 2} 3} -> 6 {{{add 1} 2} 3} -> 6 3) application: {def fs {lambda {:f} map :f}} {def f1 {lambda {:x} {* :x 2}}} {def f2 {lambda {:x} {pow :x 2}}} {def fsf1 {fs f1}} {def fsf2 {fs f2}} {{fsf1} 0 1 2 3} {{fsf2} 0 1 2 3} {{fsf1} 2 4 6 8} {{fsf2} 2 4 6 8} Output: 0 2 4 6 0 1 4 9 4 8 12 16 4 16 36 64