Define map in the fewest tokens map is a very basic yet important function in functional programming.

All FP programming languages have it built-in but it is always fun to see how shortly you can define it yourself.

This will be scored in AST nodes, not bytes.

A token is the second-smallest building block of a program, over characters.

A token is:


  anything that would be a distinct node if you drew a tree representing the source code


This scoring gives no benefit to single letter AST nodes names, and values succinctness as Paul Graham likes (this definition of AST nodes is his).

Haskell has this super cool definition:

zipWith ($) . repeat


And my lisp-ish AST of it (not required in your answer, just to show it visually)

   Apply (Apply (Var ".") (Apply (Var "zipWith") (Var "$"))) (Var "repeat")


That is 7 tokens. (Var x counts as 1)

I did not write it, so I do not post it as an answer.

Example:

(zipWith ($) . repeat) (* 3) [1, 2, 3] -- [3, 6, 9]


map should be defined as a (named or unnamed) function taking two arguments, the function and the list.

May the most AST nodes-succint code win!
Mathematica, 36 11 nodes

Thread@#@#2&amp;


The FullForm of this program is:

Function[Thread[Slot[1][Slot[2]]]]


which has 4 symbols, 2 numbers, and 5 function applications.