<blocksapp="Snap! 4.2, http://snap.berkeley.edu"version="1"><block-definitions="$flash map %'fn' over %'data'"type="reporter"category="lists"><header></header><code></code><translations></translations><inputs><inputtype="%repRing"></input><inputtype="%l"></input></inputs><script><blocks="doReport"><blocks="evaluate"><blocks="reportJSFunction"><list><l>fn</l><l>data</l><l>proc</l></list><l>return proc.reportAtomicMap(fn, data);</l></block><list><blockvar="fn"/><blockvar="data"/></list></block></block></script></block-definition><block-definitions="$flash keep %'test' from %'data'"type="reporter"category="lists"><header></header><code></code><translations></translations><inputs><inputtype="%predRing"></input><inputtype="%l"></input></inputs><script><blocks="doReport"><blocks="evaluate"><blocks="reportJSFunction"><list><l>fn</l><l>data</l><l>proc</l></list><l>return proc.reportAtomicKeep(fn, data);</l></block><list><blockvar="test"/><blockvar="data"/></list></block></block></script></block-definition><block-definitions="$flash combine %'fn' with %'data'"type="reporter"category="lists"><header></header><code></code><translations></translations><inputs><inputtype="%repRing"></input><inputtype="%l"></input></inputs><script><blocks="doReport"><blocks="evaluate"><blocks="reportJSFunction"><list><l>fn</l><l>data</l><l>proc</l></list><l>return proc.reportAtomicCombine(fn, data);</l></block><list><blockvar="fn"/><blockvar="data"/></list></block></block></script></block-definition><block-definitions="$flash sort %'data' by %'fn'"type="reporter"category="lists"><header></header><code></code><translations></translations><inputs><inputtype="%l"></input><inputtype="%predRing"></input></inputs><script><blocks="doReport"><blocks="evaluate"><blocks="reportJSFunction"><list><l>data</l><l>fn</l><l>proc</l></list><l>return proc.reportAtomicSort(data, fn);</l></block><list><blockvar="data"/><blockvar="fn"/></list></block></block></script></block-definition><block-definitions="$flash reverse %'list'"type="reporter"category="lists"><header></header><code></code><translations></translations><inputs><inputtype="%l"></input></inputs><script><blocks="doReport"><blocks="evaluate"><blocks="reportJSFunction"><list><l>list</l></list><l>return new List(list.asArray().slice().reverse());</l></block><list><blockvar="list"/></list></block></block></script></block-definition><block-definitions="$flash analyze %'data'"type="reporter"category="lists"><commentx="0"y="0"w="149"collapsed="false">returns a frequency analysis of the argument list, represented as a two-column table, where the first column contains the unique values and the second column their occurrences</comment><header></header><code></code><translations></translations><inputs><inputtype="%l"></input></inputs><script><blocks="doReport"><blocks="evaluate"><blocks="reportJSFunction"><list><l>list</l></list><l>var dict = new Map(),
 result = [],
 data = list.asArray(),
 len = data.length,
 i;
for (i = 0; i < len; i += 1) {
 if (dict.has(data[i])) {
 dict.set(data[i], dict.get(data[i]) + 1);
 } else {
 dict.set(data[i], 1);
 }
}
dict.forEach(function (value, key) {
 result.push(new List([key, value]));
});
return new List(result);</l></block><list><blockvar="data"/></list></block></block></script></block-definition><block-definitions="$flash group %'data' by %'fn'"type="reporter"category="lists"><header></header><code></code><translations></translations><inputs><inputtype="%l"></input><inputtype="%repRing"></input></inputs><script><blocks="doReport"><blocks="evaluate"><blocks="reportJSFunction"><list><l>data</l><l>fn</l><l>proc</l></list><l>return proc.reportAtomicGroup(data, fn);</l></block><list><blockvar="data"/><blockvar="fn"/></list></block></block></script></block-definition></blocks>