<snapdata remixID="14399449"><project name="vee" app="Snap! 10.7.2, https://snap.berkeley.edu" version="2"><notes>This is the project which started it all. After an example by E. Paul Goldenberg. Featuring recursion without the need for a base case and first class custom blocks it was Brian&apos;s demo at the 2008 Scratch conference, why Scratch needed custom procedures.To this day, Vee is the first project we test whenever we change anything or add new features to Snap.</notes><thumbnail>data:image/png;base64,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</thumbnail><scenes select="1"><scene name="vee"><notes>This is the project which started it all. After an example by E. Paul Goldenberg. Featuring recursion without the need for a base case and first class custom blocks it was Brian&apos;s demo at the 2008 Scratch conference, why Scratch needed custom procedures.To this day, Vee is the first project we test whenever we change anything or add new features to Snap.</notes><hidden></hidden><headers></headers><code></code><blocks><block-definition s="downUp %&apos;word&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"></input></inputs><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block s="reportTextAttribute"><l><option>length</option></l><block var="word"/></block><l>1</l></list></block><script><block s="doReport"><block var="word"/></block></script><script><block s="doReport"><block s="reportJoinWords"><list><block var="word"/><l>*</l><custom-block s="downUp %s"><custom-block s="all but last letter of %txt"><block var="word"/></custom-block></custom-block><l>*</l><block var="word"/></list></block></block></script></block></script></block-definition><block-definition s="all but first letter of %&apos;string&apos;" type="reporter" category="operators"><comment x="0" y="0" w="199" collapsed="false">Takes a text string as input, and reports a new text string containing all but the first character of the input.</comment><header></header><code></code><translations>pt:_ sem o primeiro caractere&#xD;ca:_ sense la primera lletra&#xD;es:todos menos la primera letra de _&#xD;pl:_ bez pierwszej litery&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="string"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="all but first letter of %txt"><l></l></custom-block></autolambda><list></list></block><block var="string"/></block></block></script><list></list></block><block s="doReport"><block s="reportJoinWords"><block s="reportCDR"><block s="reportTextSplit"><custom-block s="require nonempty %s %s"><block var="string"/><l>All but first of empty word.</l></custom-block><l><option>letter</option></l></block></block></block></block></script></block-definition><block-definition s="all but first word of %&apos;sentence&apos;" type="reporter" category="operators"><comment x="0" y="0" w="223.000001" collapsed="false">Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing all but the first word, with one space between words and no spaces at the beginning or end. (Note: consider using SENTENCE➞LIST and processing the resulting list instead of doing recursion on sentences in text string form.  List operations are faster.)</comment><header></header><code></code><translations>pt:_ sem a primeira palavra&#xD;ca:_ sense la primera paraula&#xD;es:todas menos la primera palabra de _&#xD;pl:_ bez pierwszego słowa&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="sentence"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportListIsEmpty"><block var="sentence"/></block><script><custom-block s="error %txt"><l>All but first of empty sentence.</l></custom-block></script><script><block s="doReport"><block s="reportCDR"><block var="sentence"/></block></block></script></block></script><list></list></block><block s="doReport"><custom-block s="list $arrowRight sentence %l"><block s="reportCDR"><custom-block s="require nonempty %s %s"><custom-block s="sentence $arrowRight list %txt"><block var="sentence"/></custom-block><l>All but first of empty sentence.</l></custom-block></block></custom-block></block></script></block-definition><block-definition s="all but last letter of %&apos;string&apos;" type="reporter" category="operators"><comment x="0" y="0" w="218" collapsed="false">Takes a text string as input, and reports a new text string containing all but the last letter of the input.</comment><header></header><code></code><translations>pt:_ sem o último caractere&#xD;ca:_ sense la darrera lletra&#xD;es:todos menos la última letra de _&#xD;pl:_ bez ostatniej litery&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="string"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="all but last letter of %txt"><l></l></custom-block></autolambda><list></list></block><block var="string"/></block></block></script><list></list></block><block s="doReport"><block s="reportJoinWords"><block s="reportListAttribute"><l><option>reverse</option></l><block s="reportCDR"><block s="reportListAttribute"><l><option>reverse</option></l><block s="reportTextSplit"><custom-block s="require nonempty %s %s"><block var="string"/><l>All but first of empty word.</l></custom-block><l><option>letter</option></l></block></block></block></block></block></block></script></block-definition><block-definition s="all but last word of %&apos;sentence&apos;" type="reporter" category="operators"><comment x="0" y="0" w="211.99999999999997" collapsed="false">Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing all but the last word, with one space between words and no spaces at the beginning or end.  (Note: consider using SENTENCE-&gt;LIST and processing the resulting list instead of doing recursion on sentences in text string form.  List operations are faster.)</comment><header></header><code></code><translations>pt:_ sem a última palavra&#xD;ca:_ sense la darrera paraula&#xD;es:todos menos la última palabra de _&#xD;pl:_ bez ostatniego słowa&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="sentence"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportListIsEmpty"><block var="sentence"/></block><script><custom-block s="error %txt"><l>All but last of empty sentence.</l></custom-block></script><script><block s="doReport"><block s="reportListAttribute"><l><option>reverse</option></l><block s="reportCDR"><block s="reportListAttribute"><l><option>reverse</option></l><block var="sentence"/></block></block></block></block></script></block></script><list></list></block><block s="doReport"><custom-block s="list $arrowRight sentence %l"><block s="reportListAttribute"><l><option>reverse</option></l><block s="reportCDR"><block s="reportListAttribute"><l><option>reverse</option></l><custom-block s="require nonempty %s %s"><custom-block s="sentence $arrowRight list %txt"><block var="sentence"/></custom-block><l>All but last of empty sentence.</l></custom-block></block></block></block></custom-block></block></script></block-definition><block-definition s="first word of %&apos;sentence&apos;" type="reporter" category="operators"><comment x="0" y="0" w="236" collapsed="false">Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing only the first word, with no spaces before or after it.</comment><header></header><code></code><translations>pt:a primeira palavra de _&#xD;ca:primera paraula de _&#xD;es:primera palabra de _&#xD;pl:pierwsze słowo _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIfElse"><block s="reportIsA"><block var="sentence"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportListIsEmpty"><block var="sentence"/></block><script><custom-block s="error %txt"><l>First of empty sentence.</l></custom-block></script><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="sentence"/></block></block></script></block></script><script><block s="doReport"><block s="reportListItem"><l>1</l><custom-block s="require nonempty %s %s"><custom-block s="sentence $arrowRight list %txt"><block var="sentence"/></custom-block><l>First of empty sentence.</l></custom-block></block></block></script></block></script></block-definition><block-definition s="last letter of %&apos;word&apos;" type="reporter" category="operators"><comment x="0" y="0" w="260" collapsed="false">Takes a text string as input, and reports the last character in the string.</comment><header></header><code></code><translations>pt:o último caractere de _&#xD;ca:primera lletra de _&#xD;es:última letra de _&#xD;pl:ostatnia litera _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="word"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="last letter of %txt"><l></l></custom-block></autolambda><list></list></block><block var="word"/></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportTextAttribute"><l><option>length</option></l><block var="word"/></block><l>0</l></list></block><script><custom-block s="error %txt"><l>Last of empty word.</l></custom-block></script><list></list></block><block s="doReport"><block s="reportLetter"><block s="reportTextAttribute"><l><option>length</option></l><block var="word"/></block><block var="word"/></block></block></script></block-definition><block-definition s="last word of %&apos;sentence&apos;" type="reporter" category="operators"><comment x="0" y="0" w="262" collapsed="false">Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing only the last word of the input, with no spaces before or after it.</comment><header></header><code></code><translations>pt:a última palavra de _&#xD;ca:darrera paraula de _&#xD;es:última palabra de _&#xD;pl:ostatnie słowo _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="sentence"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportListIsEmpty"><block var="sentence"/></block><script><custom-block s="error %txt"><l>Last of empty sentence.</l></custom-block></script><script><block s="doReport"><block s="reportListItem"><l><option>last</option></l><block var="sentence"/></block></block></script></block></script><list></list></block><block s="doReport"><block s="reportListItem"><l><option>last</option></l><custom-block s="require nonempty %s %s"><custom-block s="sentence $arrowRight list %txt"><block var="sentence"/></custom-block><l>Last of empty sentence.</l></custom-block></block></block></script></block-definition><block-definition s="empty word? %&apos;word&apos;" type="predicate" category="operators"><comment x="0" y="0" w="208" collapsed="false">Takes a text string as input, and reports TRUE if the string has no characters in it of any kind, otherwise false.</comment><header></header><code></code><translations>pt:a palavra _ está vazia&#xD;ca:paraula buida? _&#xD;es:¿palabra vacía? _&#xD;pl:puste słowo? _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="word"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="empty word? %txt"><l></l></custom-block></autolambda><list></list></block><block var="word"/></block></block></script><list></list></block><block s="doReport"><block s="reportVariadicEquals"><list><block s="reportTextAttribute"><l><option>length</option></l><block var="word"/></block><l>0</l></list></block></block></script></block-definition><block-definition s="empty sentence? %&apos;sentence&apos;" type="predicate" category="operators"><comment x="0" y="0" w="221" collapsed="false">Takes a text string as input, and reports TRUE if the input contains no characters other than spaces (therefore, no words when the string is considered as a sentence), otherwise FALSE.</comment><header></header><code></code><translations>pt:a frase _ está vazia&#xD;ca:frase buida? _&#xD;es:¿oración vacía? _&#xD;pl:puste zdanie? _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="sentence"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportListIsEmpty"><block var="sentence"/></block></block></script><list></list></block><block s="doReport"><block s="reportListIsEmpty"><custom-block s="sentence $arrowRight list %txt"><block var="sentence"/></custom-block></block></block></script></block-definition><block-definition s="join words %&apos;words&apos;" type="reporter" category="operators"><comment x="0" y="0" w="230.66666666666666" collapsed="false">Like JOIN, takes any number of words (text strings) and reports a sentence with its inputs concatenated, but inserts a blank space between the inputs.&#xD;Consider using SENTENCE (Lists palette) instead.</comment><header></header><code></code><translations>de:füge Wörter zusammen _&#xD;ca:uneix les paraules _&#xD;es:unir las palabras _&#xD;fr:fusionne les mots _&#xD;pt:uma frase com as palavras _&#xD;pl:połącz słowa _&#xD;</translations><inputs><input type="%mult%txt"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="words"/></block><script><block s="doReport"><l></l></block></script><list></list></block><block s="doDeclareVariables"><list><l>first</l><l>bf</l></list></block><block s="doSetVar"><l>first</l><block s="reportIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="words"/></block><l><option>list</option></l></block><custom-block s="join words %mult%txt"><block s="reportListItem"><l>1</l><block var="words"/></block></custom-block><block s="reportListItem"><l>1</l><block var="words"/></block></block></block><block s="doSetVar"><l>bf</l><custom-block s="join words %mult%txt"><block s="reportCDR"><block var="words"/></block></custom-block></block><block s="doIf"><custom-block s="empty sentence? %txt"><block var="bf"/></custom-block><script><block s="doReport"><block var="first"/></block></script><list></list></block><block s="doIf"><custom-block s="empty sentence? %txt"><block var="first"/></custom-block><script><block s="doReport"><block var="bf"/></block></script><list></list></block><block s="doReport"><block s="reportJoinWords"><list><block var="first"/><l> </l><block var="bf"/></list></block></block></script></block-definition><block-definition s="list $arrowRight sentence %&apos;data&apos;" type="reporter" category="operators"><comment x="0" y="0" w="165.33333333333334" collapsed="false">Takes a sentence in list form and reports the sentence as a text string.</comment><header></header><code></code><translations>de:Liste $arrowRight Satz _&#xD;ca:llista $arrowRight frase _&#xD;es:lista $arrowRight frase _&#xD;fr:liste $arrowRight phrase _&#xD;pt:uma frase com as palavras em _&#xD;pl:lista $arrowRight zdanie _&#xD;</translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="join words %mult%txt"><block var="data"/></custom-block></block></script></block-definition><block-definition s="sentence $arrowRight list %&apos;text&apos;" type="reporter" category="operators"><comment x="0" y="0" w="196" collapsed="false">Takes a sentence in text string form and reports the sentence as a list of its words.</comment><header></header><code></code><translations>de:Satz $arrowRight Liste _&#xD;ca:frase $arrowRight llista _&#xD;es:frase $arrowRight lista _&#xD;fr:phrase $arrowRight liste _&#xD;pt:uma lista com as palavras da frase _&#xD;pl:zdanie $arrowRight lista _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportVariadicEquals"><list><block s="reportTextAttribute"><l><option>length</option></l><l></l></block><l>0</l></list></block></block></autolambda><list></list></block><block s="reportTextSplit"><block var="text"/><l><option>word</option></l></block></block></block></script></block-definition><block-definition s="word $arrowRight list %&apos;word&apos;" type="reporter" category="operators"><comment x="0" y="0" w="146.42857142857144" collapsed="false">report a list in which each item is one letter from the input word</comment><header></header><code></code><translations>de:Wort $arrowRight Liste _&#xD;ca:paraula $arrowRight llista _&#xD;es:palabra $arrowRight lista _&#xD;fr:mot $arrowRight liste _&#xD;pt:uma lista com os caracteres da palavra _&#xD;pl:słowo $arrowRight lista _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="word"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="word $arrowRight list %txt"><l></l></custom-block></autolambda><list></list></block><block var="word"/></block></block></script><list></list></block><block s="doReport"><block s="reportTextSplit"><block var="word"/><l><option>letter</option></l></block></block></script></block-definition><block-definition s="list $arrowRight word %&apos;list&apos;" type="reporter" category="operators"><comment x="0" y="0" w="158.57142857142858" collapsed="false">join all the items of the input list&#xD;into a single word, and report it</comment><header></header><code></code><translations>de:Liste $arrowRight Wort _&#xD;ca:llista $arrowRight paraula _&#xD;es:lista $arrowRight palabra _&#xD;fr:liste $arrowRight mot _&#xD;pt:uma palavra com os caracteres em _&#xD;pl:lista $arrowRight słowo _&#xD;</translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="list"/></block><script><block s="doReport"><block var="list"/></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportIsA"><l></l><l><option>list</option></l></block></autolambda><list></list></block><block var="list"/></block><l></l></list></block><script><block s="doReport"><block s="reportJoinWords"><block var="list"/></block></block></script><list></list></block><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportIsA"><l></l><l><option>list</option></l></block><block s="reportNewList"><list><custom-block s="list $arrowRight word %l"><l/></custom-block></list></block><l></l></block></autolambda><list></list></block><block var="list"/></block></block></script></block-definition><block-definition s="sentence %&apos;phrase&apos;" type="reporter" category="lists"><comment x="0" y="0" w="302.6666666666667" collapsed="false">SENTENCE is the main constructor for sentences, represented&#xD;as lists of words.  It takes zero or more inputs, each of which can&#xD;be either a list or a text string.  If a list, the input is assumed to be&#xD;a list of words.  If a text string, it is converted to a list of words using&#xD;SENTENCE→LIST.  Then all the lists of words are appended to form a new list of words.&#xD;&#xD;If the inputs are lists of lists rather than lists of words, SENTENCE,&#xD;like APPEND, does only one level of flattening, reporting a list of&#xD;all the items of all the input lists.</comment><header></header><code></code><translations>ca:frase _&#xD;es:oración _&#xD;pl:zdanie _&#xD;</translations><inputs><input type="%mult%s"></input></inputs><script><block s="doReport"><block s="reportConcatenatedLists"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportIsA"><l></l><l><option>list</option></l></block><l></l><custom-block s="sentence $arrowRight list %txt"><l></l></custom-block></block></autolambda><list></list></block><block var="phrase"/></block></block></block></script></block-definition><block-definition s="error %&apos;msg&apos;" type="command" category="control"><header></header><code></code><translations>pt:lança o erro _&#xD;pl:błąd _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block var="msg"/></list></block></script></block-definition><block-definition s="printable %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" w="188.66666666666666" collapsed="false">Takes a (possibly deep) list as input,&#xD;and reports a human-readable text form &#xD;of the list (namely, Lisp notation).</comment><header></header><code></code><translations>ca:notació textual de _&#xD;es:imprimible _&#xD;pl:tekstowa _&#xD;</translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="data"/><l><option>list</option></l></block></block><script><block s="doReport"><block var="data"/></block></script><list></list></block><block s="doIf"><block s="reportListIsEmpty"><block var="data"/></block><script><block s="doReport"><l>()</l></block></script><list></list></block><block s="doReport"><block s="reportJoinWords"><list><l>(</l><block s="reportCombine"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="printable %l"><l/></custom-block></autolambda><list></list></block><block var="data"/></block><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l> </l><l></l></list></block></autolambda><list></list></block></block><l>)</l></list></block></block></script></block-definition><block-definition s="require nonempty %&apos;text&apos; %&apos;message&apos;" type="reporter" category="operators" helper="true"><comment x="0" y="0" w="220" collapsed="false">Helper function for word/sentence library.&#xD;Reports its first input, unless that input is empty, in which case it gives its second input as an error message.</comment><header></header><code></code><translations>es:requerir no vacío _ _&#xD;</translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doIfElse"><block s="reportIfElse"><block s="reportIsA"><block var="text"/><l><option>list</option></l></block><block s="reportListIsEmpty"><block var="text"/></block><block s="reportVariadicEquals"><list><block s="reportTextAttribute"><l><option>length</option></l><block var="text"/></block><l>0</l></list></block></block><script><custom-block s="error %txt"><block var="message"/></custom-block></script><script><block s="doReport"><block var="text"/></block></script></block></script></block-definition><block-definition s="first letter of %&apos;word&apos;" type="reporter" category="operators"><comment x="0" y="0" w="260" collapsed="false">Takes a text string as input, and reports the first character in the string.</comment><header></header><code></code><translations>pt:a primeira palavra de _&#xD;ca:primera lletra de _&#xD;es:primera letra de _&#xD;pl:pierwsza litera _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIfElse"><block s="reportIsA"><block var="word"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="first letter of %txt"><l></l></custom-block></autolambda><list></list></block><block var="word"/></block></block></script><script><block s="doReport"><block s="reportLetter"><l>1</l><custom-block s="require nonempty %s %s"><block var="word"/><l>First of empty word.</l></custom-block></block></block></script></block></script></block-definition></blocks><primitives></primitives><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="20" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="true" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="718"><pentrails>data:image/png;base64,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</pentrails><costumes><list struct="atomic" id="719"></list></costumes><sounds><list struct="atomic" id="720"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="Sprite" idx="1" x="-2.2737367544323206e-13" y="-149.99999999999994" heading="0" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="725"><costumes><list struct="atomic" id="726"></list></costumes><sounds><list struct="atomic" id="727"></list></sounds><blocks><block-definition s="square" type="command" category="pen"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doRepeat"><l>4</l><script><block s="forward"><l>10</l></block><block s="turn"><l>90</l></block></script></block></script></block></script></block-definition><block-definition s="hex" type="command" category="pen"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doRepeat"><l>6</l><script><block s="forward"><l>7</l></block><block s="turn"><l>60</l></block></script></block></script></block></script></block-definition><block-definition s="star" type="command" category="pen"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doRepeat"><l>5</l><script><block s="forward"><l>15</l></block><block s="turn"><l>144</l></block></script></block></script></block></script></block-definition><block-definition s="vee" type="command" category="looks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="turnLeft"><l>20</l></block><block s="forward"><l>25</l></block><block s="doRun"><block s="reportListItem"><l><option>random</option></l><block var="shapes"/></block><list></list></block><block s="forward"><l>-25</l></block><block s="turn"><l>40</l></block><block s="forward"><l>25</l></block><block s="doRun"><block s="reportListItem"><l><option>random</option></l><block var="shapes"/></block><list></list></block><block s="forward"><l>-25</l></block><block s="turnLeft"><l>20</l></block></script></block-definition></blocks><variables></variables><scripts><script x="35" y="243"><block s="receiveKey"><l><option>up arrow</option></l><list></list></block><block s="doIf"><block s="reportVariadicLessThan"><list><block s="reportListAttribute"><l><option>length</option></l><block var="shapes"/></block><l>4</l></list></block><script><block s="doAddToList"><block s="reifyScript"><script><custom-block s="vee" scope="local"></custom-block></script><list></list></block><block var="shapes"/></block><block s="doAddToList"><block s="reifyScript"><script><custom-block s="vee" scope="local"></custom-block></script><list></list></block><block var="shapes"/></block></script><list></list></block></script><script x="32" y="426.9999999999999"><block s="receiveKey"><l><option>down arrow</option></l><list></list></block><block s="doIf"><block s="reportVariadicGreaterThan"><list><block s="reportListAttribute"><l><option>length</option></l><block var="shapes"/></block><l>4</l></list></block><script><block s="doDeleteFromList"><l><option>last</option></l><block var="shapes"/></block><block s="doDeleteFromList"><l><option>last</option></l><block var="shapes"/></block></script><list></list></block></script><script x="51" y="57"><block s="receiveGo"></block><block s="clear"></block><block s="up"></block><block s="gotoXY"><l>0</l><l>-150</l></block><block s="down"></block><block s="setHeading"><l>0</l></block><custom-block s="vee" scope="local"></custom-block></script><script x="541" y="110"><custom-block s="downUp %s"><l>Hello</l></custom-block></script></scripts></sprite><watcher var="shapes" style="normal" x="336" y="3" color="243,118,29" extX="101" extY="169"/><watcher var="word" style="normal" x="10" y="10" color="243,118,29"/></sprites></stage><variables><variable name="shapes"><list id="875"><item><context id="876"><inputs></inputs><variables></variables><script><custom-block s="square" scope="local"></custom-block></script><receiver><ref id="725"></ref></receiver><origin></origin><context id="880"><inputs></inputs><variables></variables><receiver><ref id="725"></ref></receiver><origin></origin></context></context></item><item><context id="882"><inputs></inputs><variables></variables><script><custom-block s="hex" scope="local"></custom-block></script><receiver><ref id="725"></ref></receiver><origin></origin></context></item><item><context id="886"><inputs></inputs><variables></variables><script><custom-block s="star" scope="local"></custom-block></script><receiver><ref id="725"></ref></receiver><origin></origin></context></item><item><context id="890"><inputs></inputs><variables></variables><script><custom-block s="vee" scope="local"></custom-block></script><receiver><ref id="725"></ref></receiver><origin><ref id="725"></ref></origin><context id="894"><inputs></inputs><variables></variables><receiver><ref id="725"></ref></receiver><origin><ref id="725"></ref></origin></context></context></item><item><context id="896"><inputs></inputs><variables></variables><script><custom-block s="vee" scope="local"></custom-block></script><receiver><ref id="725"></ref></receiver><origin><ref id="725"></ref></origin></context></item></list></variable><variable name="word"><l>0</l></variable></variables></scene></scenes></project><media name="vee" app="Snap! 10.7.2, https://snap.berkeley.edu" version="2"></media></snapdata>