<snapdata remixID="10560352"><project name="Snap! Tools" app="Snap! 7, https://snap.berkeley.edu" version="2"><notes>This is a collection of useful procedures for Snap! users. Version 7.0.</notes><thumbnail>data:image/png;base64,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</thumbnail><scenes select="1"><scene name="Snap! Tools"><notes>This is a collection of useful procedures for Snap! users. Version 7.0.</notes><hidden> reportIsIdentical reportTextSplit reportPower reportGetImageAttribute reportNewCostumeStretched reportNewCostume getEffect doPlaySoundAtRate reportGetSoundAttribute reportNewSoundFromSamples stopFreq playFreq getPan setPan changePan doSend getLastMessage receiveCondition doCallCC reportCallCC receiveOnScene doSwitchToScene doPauseAll removeClone newClone createClone receiveOnClone reportAspect reportVideo doSetVideoTransparency doSetGlobalFlag reportDate reportGlobalFlag reportURL doForEach reportListIndex reportMap reportKeep reportFindFirst reportReshape reportNumbers getPenAttribute getPenDown floodFill write reportPenTrailsAsCostume doPasteOn doCutFrom</hidden><headers></headers><code></code><blocks><block-definition s="glide %&apos;dist&apos; steps in %&apos;time&apos; secs" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%n">100</input><input type="%n">1</input></inputs><script><block s="doGlide"><block var="time"/><block s="reportSum"><block s="xPosition"></block><block s="reportProduct"><block var="dist"/><block s="reportMonadic"><l><option>cos</option></l><block s="reportDifference"><l>90</l><block s="direction"></block></block></block></block></block><block s="reportSum"><block s="yPosition"></block><block s="reportProduct"><block var="dist"/><block s="reportMonadic"><l><option>sin</option></l><block s="reportDifference"><l>90</l><block s="direction"></block></block></block></block></block></block></script></block-definition><block-definition s="go to %&apos;pos&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="gotoXY"><block s="reportListItem"><l>1</l><block var="pos"/></block><block s="reportListItem"><l>2</l><block var="pos"/></block></block><block s="setHeading"><block s="reportListItem"><l>3</l><block var="pos"/></block></block></script></block-definition><block-definition s="position" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>pos</l></list></block><block s="doSetVar"><l>pos</l><custom-block s="savestate %mult%repRing"><list><block s="reifyReporter"><autolambda><block s="xPosition"></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="yPosition"></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="direction"></block></autolambda><list></list></block></list></custom-block></block><block s="doReport"><block s="reportNewList"><list><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block var="pos"/></block></block><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><block var="pos"/></block></block><block s="reportListItem"><l>2</l><block s="reportListItem"><l>3</l><block var="pos"/></block></block></list></block></block></script></block-definition><block-definition s="go to the layer %&apos;n&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="goToLayer"><l><option>back</option></l></block><block s="goBack"><block s="reportDifference"><l>0</l><block var="n"/></block></block></script></block-definition><block-definition s="layer" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportListIndex"><block s="reportGet"><l><option>self</option></l></block><block s="reportAskFor"><block s="reportGet"><l><option>stage</option></l></block><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>other sprites</option></l></block></autolambda><list></list></block><list></list></block></block></block></script></block-definition><block-definition s="%&apos;#&apos; cascade %&apos;num&apos; times %&apos;function&apos; of %&apos;start&apos;" type="reporter" category="control"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%n"></input><input type="%repRing"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>cont</l></list></block><block s="doSetVar"><l>result</l><block var="start"/></block><block s="doSetVar"><l>cont</l><block s="reifyScript"><script><block s="doIf"><block s="reportLessThanOrEquals"><block var="cont-num"/><block var="num"/></block><script><block s="doChangeVar"><l>#</l><l>1</l></block><block s="doSetVar"><l>result</l><block s="evaluate"><block var="function"/><list><block var="result"/></list></block></block><block s="doRun"><block var="cont"/><list><block s="reportSum"><block var="cont-num"/><l>1</l></block></list></block></script></block></script><list><l>cont-num</l></list></block></block><block s="doRun"><block var="cont"/><list><l>1</l></list></block><block s="doReport"><block var="result"/></block></script></block-definition><block-definition s="%&apos;#&apos; cascade until %&apos;test&apos; %&apos;function&apos; of %&apos;start&apos;" type="reporter" category="control"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%predRing"></input><input type="%repRing"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>cont</l></list></block><block s="doSetVar"><l>result</l><block var="start"/></block><block s="doSetVar"><l>cont</l><block s="reifyScript"><script><block s="doIf"><block s="reportNot"><block s="evaluate"><block var="test"/><list><block var="result"/></list></block></block><script><block s="doChangeVar"><l>#</l><l>1</l></block><block s="doSetVar"><l>result</l><block s="evaluate"><block var="function"/><list><block var="result"/></list></block></block><block s="doCallCC"><block var="cont"/></block></script></block></script><list></list></block></block><block s="doCallCC"><block var="cont"/></block><block s="doReport"><block var="result"/></block></script></block-definition><block-definition s="%&apos;#&apos; repeat %&apos;num&apos; %&apos;action&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%n"></input><input type="%ca"></input></inputs><script><block s="doDeclareVariables"><list><l>cont</l></list></block><block s="doSetVar"><l>cont</l><block s="reifyScript"><script><block s="doIf"><block s="reportLessThanOrEquals"><block var="cont-num"/><block var="num"/></block><script><block s="doWait"><l>0</l></block><block s="doChangeVar"><l>#</l><l>1</l></block><block s="doRun"><block var="action"/><list></list></block><block s="doRun"><block var="cont"/><list><block s="reportSum"><block var="cont-num"/><l>1</l></block></list></block></script></block></script><list><l>cont-num</l></list></block></block><block s="doRun"><block var="cont"/><list><l>1</l></list></block></script></block-definition><block-definition s="compose %&apos;f&apos; %&apos;g&apos;" type="reporter" category="control"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%repRing"></input></inputs><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="f"/><list><block s="evaluate"><block var="g"/><list><l></l></list></block></list></block></autolambda><list></list></block></block></script></block-definition><block-definition s="for %&apos;i&apos; = %&apos;start&apos; step %&apos;step&apos; to %&apos;end&apos; %&apos;action&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%n">1</input><input type="%n">1</input><input type="%n">10</input><input type="%ca"></input></inputs><script><block s="doDeclareVariables"><list><l>cont</l></list></block><block s="doSetVar"><l>i</l><block s="reportDifference"><block var="start"/><block var="step"/></block></block><block s="doSetVar"><l>cont</l><block s="reifyScript"><script><block s="doIf"><block s="reportNot"><block s="evaluate"><block s="reportIfElse"><block s="reportLessThan"><block var="step"/><l>0</l></block><block s="reifyPredicate"><autolambda><block s="reportLessThanOrEquals"><block var="i"/><block var="end"/></block></autolambda><list></list></block><block s="reifyPredicate"><autolambda><block s="reportGreaterThanOrEquals"><block var="i"/><block var="end"/></block></autolambda><list></list></block></block><list></list></block></block><script><block s="doWait"><l>0</l></block><block s="doChangeVar"><l>i</l><block var="step"/></block><block s="doCallCC"><block var="action"/></block><block s="doCallCC"><block var="cont"/></block></script></block></script><list><l>cont-num</l></list></block></block><block s="doCallCC"><block var="cont"/></block></script></block-definition><block-definition s="ignore %&apos;value&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs></block-definition><block-definition s="repeat %&apos;action&apos; until %&apos;test&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%cs"></input><input type="%boolUE"></input></inputs><script><block s="doCallCC"><block var="action"/></block><block s="doDeclareVariables"><list><l>cont</l></list></block><block s="doSetVar"><l>cont</l><block s="reifyScript"><script><block s="doIf"><block s="reportNot"><block s="evaluate"><block var="test"/><list></list></block></block><script><block s="doWait"><l>0</l></block><block s="doCallCC"><block var="action"/></block><block s="doCallCC"><block var="cont"/></block></script></block></script><list></list></block></block><block s="doCallCC"><block var="cont"/></block></script></block-definition><block-definition s="repeat %&apos;action&apos; while %&apos;test&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%cs"></input><input type="%boolUE"></input></inputs><script><custom-block s="repeat %cs until %boolUE"><block var="action"/><block s="reportNot"><block s="evaluate"><block var="test"/><list></list></block></block></custom-block></script></block-definition><block-definition s="repeat while %&apos;test&apos; %&apos;action&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%boolUE"></input><input type="%ca"></input></inputs><script><block s="doDeclareVariables"><list><l>cont</l></list></block><block s="doSetVar"><l>cont</l><block s="reifyScript"><script><block s="doIf"><block s="evaluate"><block var="test"/><list></list></block><script><block s="doWait"><l>0</l></block><block s="doCallCC"><block var="action"/></block><block s="doCallCC"><block var="cont"/></block></script></block></script><list></list></block></block><block s="doCallCC"><block var="cont"/></block></script></block-definition><block-definition s="switch ( %&apos;input&apos; ) %&apos;cmdArr&apos; else %&apos;default&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%mult%repRing"></input><input type="%cs"></input></inputs><script><custom-block s="%upvar repeat %n %ca"><l>#</l><block s="reportListAttribute"><l><option>length</option></l><block var="cmdArr"/></block><script><block s="doIf"><block s="evaluate"><block s="reportListItem"><block var="#"/><block var="cmdArr"/></block><list><block var="input"/></list></block><script><block s="doStopThis"><l><option>this block</option></l></block></script></block></script></custom-block><block s="doRun"><block var="default"/><list><block var="input"/></list></block></script></block-definition><block-definition s="switch.case %&apos;test&apos; : %&apos;code&apos;" type="reporter" category="control"><header></header><code></code><translations></translations><inputs><input type="%predRing"></input><input type="%cs"></input></inputs><script><block s="doReport"><block s="reifyScript"><script><block s="doIfElse"><block s="evaluate"><block var="test"/><list><block var="value"/></list></block><script><block s="doRun"><block var="code"/><list><block var="value"/></list></block><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script><list><l>value</l></list></block></block></script></block-definition><block-definition s="clone" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>clone</l></list></block><block s="createClone"><l><option>myself</option></l></block><block s="doSetVar"><l>clone</l><block s="reportListItem"><l><option>last</option></l><block s="evaluate"><block s="reportAttributeOf"><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>clones</option></l></block></autolambda><list></list></block><block s="reportObject"><l><option>myself</option></l></block></block><list></list></block></block></block><block s="doRun"><block s="reportAttributeOf"><block s="reifyScript"><script><block s="doSetVar"><l><option>my temporary?</option></l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><block var="clone"/></block><list></list></block><block s="doReport"><block var="clone"/></block></script></block-definition><block-definition s="%&apos;this&apos; is one of %&apos;those&apos;" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%mult%s"></input></inputs><script><block s="doReport"><block s="reportListContainsItem"><block var="those"/><block var="this"/></block></block></script></block-definition><block-definition s="accumulate with %&apos;function&apos; words of %&apos;sentence&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportCombine"><block s="reportTextSplit"><block var="sentence"/><l> </l></block><block var="function"/></block></block></script></block-definition><block-definition s="all but first letter of %&apos;string&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportCombine"><block s="reportCDR"><block s="reportTextSplit"><block var="string"/><l><option>letter</option></l></block></block><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l></l></list></block></autolambda><list></list></block></block></block></script></block-definition><block-definition s="all but first word of %&apos;sentence&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportCombine"><block s="reportCDR"><block s="reportTextSplit"><block var="sentence"/><l><option>word</option></l></block></block><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l> </l><l></l></list></block></autolambda><list></list></block></block></block></script></block-definition><block-definition s="all but last letter of %&apos;word&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportCombine"><block s="reportListAttribute"><l><option>reverse</option></l><block s="reportCDR"><block s="reportListAttribute"><l><option>reverse</option></l><block s="reportTextSplit"><block var="word"/><l><option>letter</option></l></block></block></block></block><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l></l></list></block></autolambda><list></list></block></block></block></script></block-definition><block-definition s="all but last word of %&apos;string&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportCombine"><block s="reportListAttribute"><l><option>reverse</option></l><block s="reportCDR"><block s="reportListAttribute"><l><option>reverse</option></l><block s="reportTextSplit"><block var="string"/><l><option>word</option></l></block></block></block></block><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l> </l><l></l></list></block></autolambda><list></list></block></block></block></script></block-definition><block-definition s="clone of %&apos;sprite&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%obj"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportAttributeOf"><block s="reifyReporter"><autolambda><custom-block s="clone"></custom-block></autolambda><list></list></block><block var="sprite"/></block><list></list></block></block></script></block-definition><block-definition s="first word and butfirst of %&apos;sentence&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>first</l><l>bf</l></list></block><block s="doSetVar"><l>first</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="sentence"/><l><option>word</option></l></block></block></block><block s="doSetVar"><l>bf</l><block s="reportCombine"><block s="reportCDR"><block s="reportTextSplit"><block s="reportListItem"><l>2</l><block s="reportTextSplit"><block var="sentence"/><block var="first"/></block></block><l><option>letter</option></l></block></block><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l></l></list></block></autolambda><list></list></block></block></block><block s="doReport"><block s="reportNewList"><list><block var="first"/><block var="bf"/></list></block></block></script></block-definition><block-definition s="first word of %&apos;sentence&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="sentence"/><l><option>word</option></l></block></block></block></script></block-definition><block-definition s="join words %&apos;words&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%words"></input></inputs><script><block s="doReport"><block s="reportCombine"><block var="words"/><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l> </l><l></l></list></block></autolambda><list></list></block></block></block></script></block-definition><block-definition s="last letter of %&apos;word&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportLetter"><l><option>last</option></l><block var="word"/></block></block></script></block-definition><block-definition s="last word of %&apos;sentence&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportListItem"><l><option>last</option></l><block s="reportTextSplit"><block var="sentence"/><l><option>word</option></l></block></block></block></script></block-definition><block-definition s="list $arrowRightThin sentence %&apos;list&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="list"/></block><script><block s="doReport"><l></l></block></script></block><block s="doReport"><block s="reportCombine"><block var="list"/><block s="reifyReporter"><autolambda><custom-block s="join words %words"><list><l></l><l></l></list></custom-block></autolambda><list></list></block></block></block></script></block-definition><block-definition s="pigl %&apos;word&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block s="reportStringSize"><block var="word"/></block><l>0</l></block><script><block s="doReport"><l></l></block></script><script><block s="doIf"><block s="reportGreaterThanOrEquals"><block s="reportListAttribute"><l><option>length</option></l><block s="reportTextSplit"><block var="word"/><l><option>word</option></l></block></block><l>2</l></block><script><block s="doReport"><block s="reportCombine"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="pigl %txt"><l></l></custom-block></autolambda><list></list></block><block s="reportTextSplit"><block var="word"/><l><option>word</option></l></block></block><block s="reifyReporter"><autolambda><custom-block s="join words %words"><list><l></l><l></l></list></custom-block></autolambda><list></list></block></block></block></script></block></script></block><block s="doReport"><block s="reportJoinWords"><list><custom-block s="%upvar cascade until %predRing %repRing of %s"><l>#</l><block s="reifyPredicate"><autolambda><custom-block s="%s is one of %mult%s"><block s="reportLetter"><l>1</l><l></l></block><list><l>a</l><l>e</l><l>i</l><l>o</l><l>u</l></list></custom-block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><custom-block s="all but first letter of %txt"><l></l></custom-block><block s="reportLetter"><l>1</l><l></l></block></list></block></autolambda><list></list></block><block var="word"/></custom-block><l>ay</l></list></block></block></script></block-definition><block-definition s="savestate %&apos;attribs&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%mult%repRing"></input></inputs><script><block s="doDeclareVariables"><list><l>a</l></list></block><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportNotEquals"><block s="reportJoinWords"><list><block s="evaluate"><block var="value"/><list></list></block></list></block><l>Context &gt;&gt; [a RingMorph ("%rr %ringparms...")] a variableFrame {}</l></block><block s="reportNewList"><list><block var="value"/><block s="evaluate"><block var="value"/><list></list></block></list></block><block s="reportNewList"><list><block var="value"/><block s="reportJoinWords"><list></list></block></list></block></block></autolambda><list><l>value</l></list></block><block var="attribs"/></block></block></script></block-definition><block-definition s="sentence $arrowRightThin list %&apos;sent&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sent"/></block><l>0</l></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doReport"><block s="reportTextSplit"><block var="sent"/><l><option>word</option></l></block></block></script></block-definition><block-definition s="loud?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportGreaterThanOrEquals"><block s="reportAudio"><l><option>volume</option></l></block><l>30</l></block></block></script></block-definition><block-definition s="copy of %&apos;a list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportAtomicMap"><block s="reifyScript"><script><block s="doReport"><block var="value"/></block></script><list><l>value</l></list></block><block var="a list"/></block></block></script></block-definition><block-definition s="%&apos;#&apos; for each item of %&apos;lists&apos; %&apos;action&apos;" type="command" category="lists"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%mult%l"></input><input type="%ca"></input></inputs><script><block s="doWarp"><script><block s="doSetVar"><l>#</l><l>0</l></block><block s="doRepeat"><block s="reportListAttribute"><l><option>length</option></l><block s="reportListItem"><l>1</l><block var="lists"/></block></block><script><block s="doChangeVar"><l>#</l><l>1</l></block><block s="doRun"><block var="action"/><custom-block s="%upvar map %repRing over %mult%l"><l>####</l><block s="reifyReporter"><autolambda><block s="reportListItem"><block var="#"/><l/></block></autolambda><list></list></block><list><block var="lists"/></list></custom-block></block></script></block></script></block></script></block-definition><block-definition s="%&apos;#&apos; keep items such that %&apos;pred&apos; from %&apos;list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%predRing"></input><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doWarp"><script><block s="doRepeat"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><script><block s="doChangeVar"><l>#</l><l>1</l></block><block s="doIf"><block s="evaluate"><block var="pred"/><list><block s="reportListItem"><block var="#"/><block var="list"/></block></list></block><script><block s="doAddToList"><block s="reportListItem"><block var="#"/><block var="list"/></block><block var="result"/></block></script></block></script></block></script></block><block s="doReport"><block var="result"/></block></script></block-definition><block-definition s="%&apos;#&apos; map %&apos;function&apos; over %&apos;lists&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%repRing"></input><input type="%mult%l"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>#</l><l>0</l></block><block s="doIfElse"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="lists"/></block><l>1</l></block><script><block s="doWarp"><script><block s="doRepeat"><block s="reportListAttribute"><l><option>length</option></l><block s="reportListItem"><l>1</l><block var="lists"/></block></block><script><block s="doChangeVar"><l>#</l><l>1</l></block><block s="doAddToList"><block s="evaluate"><block var="function"/><list><block s="reportListItem"><block var="#"/><block s="reportListItem"><l>1</l><block var="lists"/></block></block></list></block><block var="result"/></block></script></block></script></block></script><script><block s="doIf"><block s="reportGreaterThanOrEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="lists"/></block><l>2</l></block><script><block s="doWarp"><script><block s="doRepeat"><block s="reportListAttribute"><l><option>length</option></l><block s="reportListItem"><l>1</l><block var="lists"/></block></block><script><block s="doChangeVar"><l>#</l><l>1</l></block><block s="doAddToList"><block s="reportCombine"><custom-block s="%upvar map %repRing over %mult%l"><l>i</l><block s="reifyReporter"><autolambda><block s="reportListItem"><block var="#"/><l/></block></autolambda><list></list></block><list><block var="lists"/></list></custom-block><block var="function"/></block><block var="result"/></block></script></block></script></block></script></block></script></block><block s="doReport"><block var="result"/></block></script></block-definition><block-definition s="adjoin to %&apos;list&apos; this item %&apos;new&apos; on the right" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><custom-block s="%upvar for each item of %mult%l %ca"><l>#</l><list><block var="list"/></list><script><block s="doAddToList"><block s="reportListItem"><block var="#"/><block var="list"/></block><block var="result"/></block></script></custom-block><block s="doAddToList"><block var="new"/><block var="result"/></block></script></block><block s="doReport"><block var="result"/></block></script></block-definition><block-definition s="crossmap %&apos;function&apos; %&apos;lists&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%mult%l"></input></inputs><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="function"/><block var="list"/></block></autolambda><list><l>list</l></list></block><custom-block s="crossproduct %mult%l"><block var="lists"/></custom-block></block></block></script></block-definition><block-definition s="crossproduct %&apos;lists&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%mult%l"></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="lists"/></block><l>1</l></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportNewList"><list><l></l></list></block></autolambda><list></list></block><block s="reportListItem"><l>1</l><block var="lists"/></block></block><block s="evaluate"><block s="reifyScript"><script><block s="doDeclareVariables"><list><l>small</l></list></block><block s="doSetVar"><l>small</l><custom-block s="crossproduct %mult%l"><block s="reportCDR"><block var="lists"/></block></custom-block></block><block s="doReport"><block s="reportCombine"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportCONS"><block var="newitem"/><l/></block></autolambda><list></list></block><block var="small"/></block></autolambda><list><l>newitem</l></list></block><block s="reportListItem"><l>1</l><block var="lists"/></block></block><block s="reifyReporter"><autolambda><block s="reportConcatenatedLists"><list><l/><l/></list></block></autolambda><list></list></block></block></block></script><list></list></block><list></list></block></block></block></script></block-definition><block-definition s="make all combinations of items of %&apos;lists&apos; $nl combining with %&apos;combiner&apos; $nl building up from %&apos;sofar&apos; $nl and do %&apos;action&apos; for each combination" type="command" category="lists"><header></header><code></code><translations></translations><inputs><input type="%mult%l"></input><input type="%repRing"></input><input type="%s"></input><input type="%ca"></input></inputs><script><block s="doIfElse"><block s="reportListIsEmpty"><block var="lists"/></block><script><block s="doRun"><block var="action"/><list><block var="sofar"/></list></block></script><script><custom-block s="%upvar for each item of %mult%l %ca"><l>#</l><list><block s="reportListItem"><l>1</l><block var="lists"/></block></list><block s="reifyScript"><script><block s="doRun"><block s="reifyScript"><script><custom-block s="make all combinations of items of %mult%l %br combining with %repRing %br building up from %s %br and do %ca for each combination"><list></list><block var="combiner"/><block s="evaluate"><block var="combiner"/><list><block var="sofar"/><block var="new"/></list></block><block var="action"/></custom-block></script><list></list></block><block s="reportCDR"><block var="lists"/></block></block></script><list><l>new</l></list></block></custom-block></script></block></script></block-definition><block-definition s="remove duplicates from %&apos;list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListIndex"><block var="value"/><block var="list"/></block><block var="index"/></block></autolambda><list><l>value</l><l>index</l><l>list</l></list></block><block var="list"/></block></block></script></block-definition></blocks><stage name="Escenario" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="true" volume="100" pan="0" lines="round" ternary="true" hyperops="true" codify="false" inheritance="true" sublistIDs="true" id="1414"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAAAXNSR0IArs4c6QAADoVJREFUeF7t1cEJAAAIxDDdf2m3sJ+4wEEQuuMIECBAgACBd4F9XzRIgAABAgQIjAB7AgIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECByxcQFpoRMBzwAAAABJRU5ErkJggg==</pentrails><costumes><list struct="atomic" id="1415"></list></costumes><sounds><list struct="atomic" id="1416"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="ToolSprite" idx="1" x="72" y="2" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="1" color="80,80,80,1" pen="middle" id="1421"><costumes><list id="1422"><item><ref mediaID="ToolSprite_cst_howto"></ref></item></list></costumes><sounds><list struct="atomic" id="1423"></list></sounds><blocks></blocks><variables><variable name="second"><context id="1426"><inputs></inputs><variables></variables><block s="evaluate"><block var="f"/><list><block s="evaluate"><block var="g"/><list><l></l></list></block></list></block><receiver><ref id="1421"></ref></receiver><origin><ref id="1421"></ref></origin><context id="1439"><inputs></inputs><variables><variable name="f"><context id="1441"><inputs></inputs><variables></variables><custom-block s="first word of %txt"><l></l></custom-block><receiver><ref id="1421"></ref></receiver><origin><ref id="1421"></ref></origin><context id="1446"><inputs><input></input></inputs><variables></variables><receiver><ref id="1421"></ref></receiver><origin><ref id="1421"></ref></origin></context></context></variable><variable name="g"><context id="1448"><inputs></inputs><variables></variables><custom-block s="all but first word of %txt"><l></l></custom-block><receiver><ref id="1421"></ref></receiver><origin><ref id="1421"></ref></origin><ref id="1446"></ref></context></variable></variables><receiver><ref id="1421"></ref></receiver><origin></origin></context></context></variable><variable name="x"><l>0</l></variable></variables><scripts><comment x="20" y="20" w="479" collapsed="false">Title:&#xD;Snap! Tools&#xD;&#xD;Description:&#xD;This is a collection of useful procedures for Snap! users. Version 7.0.&#xD;-----------------------------------------------------------------------------------------------------------------------------------------------&#xD;Several of them have a variable named &quot;#&quot; or &quot;i&quot; at the left end of the block.  This variable will be equal to the number of repetitions so far of some action (1 the first time, 2 the second, etc.) or equal to the item number in a list, when something is being done for each item of the list.  The # or i can be dragged into the blocks or scripts used as inputs to this block.&#xD;-----------------------------------------------------------------------------------------------------------------------------------------------&#xD;The scripts below are just samples to show how these tools work; they aren&apos;t meant to be a useful project.</comment><script x="20" y="206"><block s="reifyScript"><script><block s="gotoXY"><l>72</l><l>2</l></block><block s="setHeading"><l>90</l><comment w="80" collapsed="false">This script have to back in my initial state.</comment></block><block s="show"></block><block s="down"></block><block s="clear"></block></script><list></list><comment w="99" collapsed="true">Backward script:</comment></block></script><comment x="20" y="322.5" w="92" collapsed="true">Motion Pallete:</comment><script x="20" y="354.5"><custom-block s="glide %n steps in %n secs"><l>100</l><l>1</l><comment w="90" collapsed="false">... in the current direction!  Isn&apos;t this what they should have provided?</comment></custom-block></script><script x="20" y="447.5"><custom-block s="go to %l"><block s="reportNewList"><list><l>200</l><l>-100</l><l>90</l></list></block><comment w="224" collapsed="false">A first step at promoting the idea of &quot;a position&quot; as a single datum you can, e.g., save and restore.</comment></custom-block></script><script x="20" y="516.5"><custom-block s="position"></custom-block></script><comment x="20" y="546.333333333333" w="86" collapsed="true">Looks Pallete:</comment><script x="20" y="578.333333333333"><block s="reifyScript"><script><custom-block s="go to the layer %n"><l></l></custom-block><custom-block s="ignore %s"><custom-block s="layer"></custom-block></custom-block><custom-block s="ignore %s"><block s="reportShown"></block></custom-block></script><list></list><comment w="103" collapsed="false">Examples demonstrating the use&#xD;of the MY [ v] block.</comment></block></script><comment x="20" y="664" w="91" collapsed="true">Control Pallete:</comment><script x="20" y="696"><block s="doWarp"><script><block s="hide"></block><block s="clear"></block><block s="down"></block><custom-block s="%upvar repeat %n %ca"><l>#</l><l>200</l><script><block s="forward"><block var="#"/></block><block s="turn"><l>92</l></block></script></custom-block><block s="up"></block></script><comment w="103" collapsed="false">Like the built-in REPEAT () {&#xD;&#xD;}&#xD;but with #.</comment></block></script><script x="20" y="891.833333333333"><block s="reifyScript"><script><custom-block s="ignore %s"><block s="reportIfElse"><block s="reportLessThan"><block var="x"/><l>0</l></block><block s="reportMonadic"><l><option>neg</option></l><block var="x"/></block><block var="x"/></block></custom-block><custom-block s="ignore %s"><block s="reportIfElse"><block s="reportLessThan"><block var="x"/><l>0</l></block><l>-1</l><l>1</l></block></custom-block></script><list></list><comment w="126" collapsed="false">Like the built-in&#xD;IF &lt;&gt; THEN {&#xD;&#xD;} ELSE {&#xD;&#xD;}&#xD; block, but reports a value.</comment></block></script><script x="20" y="1020.833333333333"><block s="doFor"><l>i</l><l>5</l><l>3</l><script><block s="doFor"><l>k</l><l>1</l><l>4</l><script><block s="doSayFor"><custom-block s="join words %words"><list><block var="i"/><block var="k"/></list></custom-block><l>0.5</l></block></script></block></script><comment w="113" collapsed="false">Repetition with a renameable variable, user-settable start and end values, in ascending or descending order.</comment></block></script><script x="20" y="1134.333333333333"><custom-block s="for %upvar = %n step %n to %n %ca"><l>i</l><l>0</l><l>0.5</l><l>2</l><script><block s="doSayFor"><block var="i"/><l>0.5</l></block></script><comment w="139" collapsed="false">Same as above, but allowing a step size other than 1 or -1.</comment></custom-block></script><script x="20" y="1209"><custom-block s="repeat while %boolUE %ca"><l/><script></script><comment w="430" collapsed="true">Like the built-in REPEAT UNTIL but keeps going while the condition is TRUE, not false.</comment></custom-block></script><script x="20" y="1265"><custom-block s="repeat %cs until %boolUE"><script></script><l/><comment w="370" collapsed="true">Like REPEAT UNTIL but runs the script once before testing the condition.</comment></custom-block></script><script x="20" y="1331.833333333333"><custom-block s="repeat %cs while %boolUE"><script></script><l/><comment w="370" collapsed="true">Like REPEAT WHILE but runs the script once before testing the condition.</comment></custom-block></script><script x="20" y="1398.6666666666665"><block s="doSetVar"><l>second</l><custom-block s="compose %repRing %repRing"><block s="reifyReporter"><autolambda><custom-block s="first word of %txt"><l></l></custom-block></autolambda><list></list></block><block s="reifyReporter"><autolambda><custom-block s="all but first word of %txt"><l></l></custom-block></autolambda><list></list></block></custom-block><comment w="80" collapsed="false">Composition of functions: make a new function f(g(x)).</comment></block><block s="doSayFor"><block s="evaluate"><block var="second"/><list><l>Build Your Own Blocks</l></list></block><l>2</l></block></script><script x="20" y="1492.4999999999995"><custom-block s="%upvar cascade %n times %repRing of %s"><l>#</l><l>6</l><block s="reifyReporter"><autolambda><block s="reportProduct"><l></l><block var="#"/></block></autolambda><list></list></block><l>1</l><comment w="156" collapsed="false">Call f(f(f(...(f(x)))), i.e., compose a function with itself.&#xD;This example is the factorial of 6.</comment></custom-block></script><script x="20" y="1573.4999999999995"><block s="reportJoinWords"><list><custom-block s="%upvar cascade until %predRing %repRing of %s"><l>#</l><block s="reifyPredicate"><autolambda><custom-block s="%s is one of %mult%s"><block s="reportLetter"><l>1</l><l></l></block><list><l>a</l><l>e</l><l>i</l><l>o</l><l>u</l></list></custom-block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><custom-block s="all but first letter of %txt"><l></l></custom-block><block s="reportLetter"><l>1</l><l></l></block></list></block></autolambda><list></list></block><l>scratch</l></custom-block><l>ay</l></list><comment w="80" collapsed="false">Also f(f(f(...(f(x))))) but cascading until some condition is met, instead of a fixed number of times.</comment></block></script><script x="20" y="1702.4999999999995"><block s="doAsk"><l>what?</l><comment w="111" collapsed="false">Many thanks to nXIII for the brilliant idea of making CASE a reporter in his design for&#xD;the SWITCH block demonstrated below.  We changed the name of the CASE block to&#xD;SWITCH.CASE so that it comes near SWITCH in the alphabetical listing in the palette.&#xD;In each SWITCH.CASE and in the ELSE script, an empty input slot represents the value&#xD;given as the first input to the SWITCH block.</comment></block><custom-block s="switch ( %s ) %mult%repRing else %cs"><block s="getLastAnswer"></block><list><custom-block s="switch.case %predRing : %cs"><block s="reifyPredicate"><autolambda><block s="reportEquals"><l></l><l>foo</l></block></autolambda><list></list></block><script><block s="bubble"><l>Moby foo!</l></block></script></custom-block><custom-block s="switch.case %predRing : %cs"><block s="reifyPredicate"><autolambda><custom-block s="%s is one of %mult%s"><l></l><list><l>bar</l><l>baz</l></list></custom-block></autolambda><list></list></block><script><block s="bubble"><l>Not garply?</l></block></script></custom-block><custom-block s="switch.case %predRing : %cs"><block s="reifyPredicate"><autolambda><block s="reportIsA"><l></l><l><option>text</option></l></block></autolambda><list></list></block><script><block s="bubble"><custom-block s="join words %words"><list><l></l><l>to you too!</l></list></custom-block></block></script></custom-block></list><script><block s="bubble"><block s="reportPower"><l></l><l>2</l></block></block></script></custom-block></script><script x="20" y="1970.5"><custom-block s="ignore %s"><l></l><comment w="91" collapsed="false">Does nothing.  Occasionally useful if you want to call a reporter but you don&apos;t care about the value it reports.</comment></custom-block></script><script x="20" y="2087.5"><block s="doRepeat"><l>10</l><script><custom-block s="ignore %s"><custom-block s="clone"></custom-block></custom-block></script><comment w="118" collapsed="true">A common example.</comment></block></script><script x="20" y="2157.3333333333335"><block s="reifyScript"><script><block s="doTellTo"><l>Stage</l><block s="reifyScript"><script><block s="changeEffect"><l><option>color</option></l><l>-25</l></block></script><list></list></block><list></list></block><custom-block s="ignore %s"><block s="reportAskFor"><l>Stage</l><block s="reifyReporter"><autolambda><block s="reportAttributeOf"><l><option>costume #</option></l><block s="reportGet"><l><option>self</option></l></block></block></autolambda><list></list></block><list></list></block></custom-block></script><list></list><comment w="178" collapsed="false">Run or call a block in a different sprite.</comment></block></script><comment x="20" y="2253.3333333333335" w="105" collapsed="true">Operators Pallete:</comment><script x="20" y="2285.3333333333335"><block s="reportMonadic"><l><option>id</option></l><l></l><comment w="445" collapsed="false">The identity function: just reports its input unchanged.  This is sometimes useful as input to a function-of-functions if you don&apos;t want to compute a new value.  Also for making constant functions.</comment></block></script><script x="20" y="2354.3333333333335"><custom-block s="%s is one of %mult%s"><l></l><list><l>a</l><l>e</l><l>i</l><l>o</l><l>u</l></list><comment w="273.970703125" collapsed="false">Just the CONTAINS block rearranged to fit better the case of a constant list.  From an idea by ScratchReallyROCKS.</comment></custom-block></script><comment x="20" y="2423.3333333333335" w="600" collapsed="false">The ones below have to do with Scratch&apos;s string data type.  Instead of flat strings of characters, what they *should* have provided are the Logo word and sentence operations, so that a sentence would automatically be divided into words, rather than into characters.  This is much more convenient for dealing with human language text, the usual reason for wanting strings.  Note: Some of these functions are pretty slow.  You might want to use a *list* of words inside your program, using sentences only for user input and display.</comment><script x="20" y="2513.3333333333335"><custom-block s="all but first letter of %txt"><l></l><comment w="218.99999999999994" collapsed="false">This one applies to words.  It&apos;s useful along with LETTER 1 OF when writing recursive reporters.</comment></custom-block></script><script x="20" y="2582.3333333333335"><custom-block s="first word of %txt"><l></l></custom-block></script><script x="20" y="2615.3333333333335"><custom-block s="all but first word of %txt"><l></l><comment w="409.99999999999994" collapsed="false">These are for sentences; they find everything up to the first space if any, and everything after the first space if any.  Conceptually, the elements of a sentence are words, not letters.</comment></custom-block></script><script x="20" y="2684.3333333333335"><custom-block s="first word and butfirst of %txt"><l></l><comment w="374.99999999999994" collapsed="false">Reports a list of length 2, containing the first word and all but the first word of the sentence.  One efficient pass through the string.  Calling this once and storing the result in a script variable is the best way to write a recursive reporter on sentences.</comment></custom-block></script><script x="20" y="2765.3333333333335"><custom-block s="last letter of %txt"><l></l></custom-block></script><script x="20" y="2798.3333333333335"><custom-block s="last word of %txt"><l></l><comment w="203.99999999999994" collapsed="true">Same as above, but starting at the end.</comment></custom-block></script><script x="20" y="2833.3333333333335"><custom-block s="all but last word of %txt"><l></l></custom-block></script><script x="20" y="2866.3333333333335"><custom-block s="join words %words"><list><l></l><l></l></list><comment w="343" collapsed="false">If the ones above are how you take sentences apart, this is how you put them together.  It takes any number of inputs, each of which can be a word or a sentence.  They are combined to form a new sentence.  (In other words, this is like the built in JOIN except that it puts spaces between the inputs.)</comment></custom-block></script><script x="20" y="2959.3333333333335"><custom-block s="sentence $arrowRightThin list %txt"><l></l><comment w="371.99999999999994" collapsed="false">As mentioned above, it can be more efficient to do complicated computations using lists of the words rather than a string with spaces between the words of a sentence.  These allow conversion between sentences (strings) and lists of words.</comment></custom-block></script><script x="20" y="3040.3333333333335"><custom-block s="list $arrowRightThin sentence %l"><l/></custom-block></script><script x="20" y="3072.3333333333335"><custom-block s="savestate %mult%repRing"><list><block s="reifyReporter"><autolambda><block s="xPosition"></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="yPosition"></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="direction"></block></autolambda><list></list></block><block s="reifyPredicate"><autolambda><block s="getPenDown"></block></autolambda><list></list></block></list><comment w="376" collapsed="false">Takes any number of attribute or variable getters and reports a list containing the saved state of those sprite properties.&#xD;Note: RESTORESTATE [...] is not here, because the attribute settings are obsolete.</comment></custom-block></script><script x="20" y="3174.666666666667"><custom-block s="clone of %obj"><l/><comment w="237" collapsed="false">For the users who wanted CLONE to take an input.</comment></custom-block></script><comment x="20" y="3231.666666666667" w="80" collapsed="true">Lists Pallete:</comment><comment x="20" y="3263.666666666667" w="433" collapsed="false">Note that unlike some of the built-in list blocks, these create new lists, not modifying their inputs!</comment><script x="20" y="3317.666666666667"><block s="reportListIsEmpty"><l/><comment w="377" collapsed="false">Reports TRUE for a list of length 0.  Convenient base case in recursive procedures.</comment></block></script><script x="20" y="3374.666666666667"><block s="reportCONS"><l></l><l/></block></script><script x="20" y="3407.666666666667"><block s="reportCDR"><l/><comment w="269" collapsed="false">The most common pattern in recursive list reporters is&#xD;[] IN FRONT OF [...] (some-function-of ITEM 1 OF list-input)&#xD;TO (recursive-call-with ALL BUT FIRST OF [...] list-input)</comment></block></script><script x="20" y="3488.666666666667"><block s="reportConcatenatedLists"><list><l/><l/></list><comment w="309" collapsed="false">Make a new list combining all the items of any number of input lists.</comment></block></script><script x="20" y="3545.666666666667"><block s="reportListAttribute"><l><option>reverse</option></l><l/><comment w="284" collapsed="false">Make a new list with the items of the input list in reverse order.</comment></block></script><script x="20" y="3602.666666666667"><custom-block s="remove duplicates from %l"><l/><comment w="206" collapsed="false">Copy a list but include each value only once.</comment></custom-block></script><comment x="20" y="3659.666666666667" w="230" collapsed="false">Here are three really crucial functions of functions:</comment><script x="20" y="3713.666666666667"><custom-block s="%upvar map %repRing over %mult%l"><l>#</l><block s="reifyReporter"><autolambda><block s="reportProduct"><l></l><l>10</l></block></autolambda><list></list></block><list><block s="reportNewList"><list><l>5</l><l>6</l><l>7</l></list></block></list><comment w="354" collapsed="false">Compute a function of each item of the list, report a list of the resulting values.</comment></custom-block></script><script x="20" y="3770.666666666667"><custom-block s="%upvar keep items such that %predRing from %l"><l>#</l><block s="reifyPredicate"><autolambda><block s="reportGreaterThan"><l></l><l>5</l></block></autolambda><list></list></block><block s="reportNewList"><list><l>7</l><l>2</l><l>23</l><l>44</l><l>4</l><l>1</l></list></block><comment w="114" collapsed="false">Select a subset of a list.</comment></custom-block></script><script x="20" y="3827.666666666667"><block s="reportCombine"><block s="reportNewList"><list><l>5</l><l>6</l><l>7</l></list></block><block s="reifyReporter"><autolambda><block s="reportSum"><l></l><l></l></block></autolambda><list></list></block></block></script><comment x="20" y="3870.666666666667" w="446" collapsed="false">Here&apos;s an example combining the above to do something more interesting: make an acronym from a phrase.  These operations make many taks *really* easy to write once you get familiar with them!</comment><script x="20" y="3936.6666666666665"><block s="doSayFor"><block s="reportCombine"><custom-block s="%upvar map %repRing over %mult%l"><l>#</l><block s="reifyReporter"><autolambda><block s="reportLetter"><l>1</l><l></l></block></autolambda><list></list></block><list><custom-block s="%upvar keep items such that %predRing from %l"><l>#</l><block s="reifyPredicate"><autolambda><block s="reportNot"><custom-block s="%s is one of %mult%s"><l></l><list><l>a</l><l>an</l><l>the</l><l>for</l><l>of</l><l>in</l><l>at</l><l>to</l></list></custom-block></block></autolambda><list></list></block><custom-block s="sentence $arrowRightThin list %txt"><l>University of California at Berkeley</l></custom-block></custom-block></list></custom-block><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l></l></list></block></autolambda><list></list></block></block><l>2</l></block></script><script x="20" y="4111.333333333334"><custom-block s="%upvar map %repRing over %mult%l"><l>#</l><block s="reifyReporter"><autolambda><block s="reportSum"><l></l><l></l></block></autolambda><list></list></block><list><block s="reportNewList"><list><l>3</l><l>4</l><l>5</l></list></block><block s="reportNewList"><list><l>60</l><l>70</l><l>80</l></list></block></list><comment w="146" collapsed="false">MAP can take N same-length lists and a function of N inputs.</comment></custom-block></script><script x="20" y="4180.333333333334"><custom-block s="%upvar for each item of %mult%l %ca"><l>#</l><list><block s="reportNewList"><list><l>I</l><l>want</l><l>to</l><l>hold</l><l>your</l><l>hand!</l></list></block></list><script><block s="doSayFor"><l></l><l>0.5</l></block></script><comment w="113" collapsed="false">Like MAP, but do a script instead of reporting.</comment></custom-block></script><script x="20" y="4254.166666666667"><custom-block s="crossproduct %mult%l"><list><l/><l/></list><comment w="301" collapsed="false">Take any number of lists, report a &quot;list of lists&quot; in which each sublist has one element from each input list, with all possibilities included.</comment></custom-block></script><comment x="20" y="4323.166666666667" w="404" collapsed="false">CROSSMAP, used below, combines MAP and CROSSPRODUCT; the example shows that this can be really convenient, and also shows readably what CROSSPRODUCT does.</comment><script x="20" y="4389.166666666667"><custom-block s="%upvar for each item of %mult%l %ca"><l>#</l><list><custom-block s="crossmap %repRing %mult%l"><block s="reifyReporter"><autolambda><custom-block s="join words %words"><list><l></l><l></l><l></l></list></custom-block></autolambda><list></list></block><list><block s="reportNewList"><list><l>small</l><l>medium</l><l>large</l></list></block><block s="reportNewList"><list><l>chocolate</l><l>rum raisin</l><l>pumpkin</l><l>lychee</l></list></block><block s="reportNewList"><list><l>cone</l><l>cup</l></list></block></list></custom-block></list><script><block s="doSayFor"><l></l><l>0.5</l></block></script></custom-block></script><comment x="20" y="4527" w="482" collapsed="false">... but constructing the entire list of 3x4x2=24 combinations silently and then saying them seems really sluggish.  So sometimes you actually have to roll up your sleeves and write a recursive higher order procedure that has exactly the behavior you wanted.  The version below doesn&apos;t generate a list of 24 combinations; it generates the combinations one at a time and processes each one (says it, in this example) as it&apos;s made.  So, even though it&apos;s really just as slow, this doesn&apos;t /feel/ as slow because the slowness is distributed in between each speech balloon, instead of happening all at once.  By the way, if you look inside the block you&apos;ll see that getting recursive calls to blocks with multiple-input slots right is tricky!</comment><script x="20" y="4653"><custom-block s="make all combinations of items of %mult%l %br combining with %repRing %br building up from %s %br and do %ca for each combination"><list><block s="reportNewList"><list><l>small</l><l>medium</l><l>large</l></list></block><block s="reportNewList"><list><l>chocolate</l><l>rum raisin</l><l>pumpkin</l><l>lychee</l></list></block><block s="reportNewList"><list><l>cone</l><l>cup</l></list></block></list><block s="reifyReporter"><autolambda><custom-block s="join words %words"><list><l></l><l></l></list></custom-block></autolambda><list></list></block><l></l><script><block s="doSayFor"><l></l><l>0.5</l></block></script></custom-block></script><comment x="20" y="4814.500000000002" w="514" collapsed="false">Here&apos;s a slightly different use of the same block just to help you understand the role of the &quot;building up from&quot; input.</comment><script x="20" y="4868.500000000002"><custom-block s="make all combinations of items of %mult%l %br combining with %repRing %br building up from %s %br and do %ca for each combination"><list><block s="reportNewList"><list><l>small</l><l>medium</l><l>large</l></list></block><block s="reportNewList"><list><l>chocolate</l><l>rum raisin</l><l>pumpkin</l><l>lychee</l></list></block><block s="reportNewList"><list><l>cone</l><l>cup</l></list></block></list><block s="reifyReporter"><autolambda><custom-block s="adjoin to %l this item %s on the right"><l/><l></l></custom-block></autolambda><list></list></block><block s="reportNewList"><list></list></block><script><block s="doSayFor"><l></l><l>0.5</l></block></script></custom-block></script></scripts></sprite><watcher scope="ToolSprite" var="second" style="normal" x="10" y="10" color="243,118,29" hidden="true"/><watcher scope="ToolSprite" var="x" style="normal" x="10" y="48.000001999999995" color="243,118,29" hidden="true"/></sprites></stage><variables></variables></scene></scenes></project><media name="Snap! Tools" app="Snap! 7, https://snap.berkeley.edu" version="2"><costume name="howto" center-x="150.5" center-y="75" image="data:image/png;base64,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" mediaID="ToolSprite_cst_howto"/></media></snapdata>