<snapdata remixID="14401550"><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,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAAAXNSR0IArs4c6QAAEcVJREFUeF7tnQlYFFe2x/8giAJuIIImiICOK664ICDuL3Ed18wLkzwTZ9RxeVFUXOMWV1wwajLRGUZfovPiFl9iNIniggvuu4gKuCWuoCI7yvK+c0kV3djEsquL7g7nfl8+7O57Tp3631/OvVV1616bwsLCQnBhBcykgA0DaCblTXjYK1euIDMzEx4eHib0qt7V3bt3UbVqVTRp0qRUZwygep3N6iEuLg7Ozs6wsbGR46BOzZI+E4gBAQEGdWIAzYqP+oNHR0ejQYMGArihQ4eiS5cu2LRpE0JDQ7F48WJERUVh9+7d6NWrF4YPH47bt2/Dy8tL/JWKBGzJv6b6nQFU384W6+HWrVsiNgLQwcEB7du3R0hICA4ePIhhw4YJ0Ags+rxjxw60adMG+fn5ICgKCgrk8yJ73csBU3+uV68eZ0CLpUhFYBKAv+Xi4sWLaN68uYqjqDdlANVraJEebt68Kcfl4e6OxPjLKIR5b2wU5OejmlttPb28vb05A1okQSqD0gVwzxh/hPo54XEFV8S69kKtGlVga2ODgsJCzf8+zLbF/SxgZMoacUYV5lzDgwcP5LNjAFU2tKWa37hxQw7t4Ph28G/RDNX/+qX8XeLFM/j7/JllFn4lRyf8ve0DOC+5A93YfHx8OAOWWSuU4YGokaWrVwKwycDxqN3lPTmCK8NawLeKLa6GrsbdJ2maREbHz0xPQ/+jEcL/pbaDMejjdUhKShIXR/S7r68vA6iJ+mZ2mpiYKEdwKKwDuq46rRfRg1Et8UtoJGJT7iPSNQNAITwqO2Pmo+p48eKFqHvwYRK+bez82mcyIMsBPQrdZbvsrEz0iVmInSEzMHHiROjGVr9+fQbwtRW2AgMlAJ7rvwhHMx9gU63n4owGeTXD9tuXVZ9dwDMbvGfniTVr1mDs2LHCX+cfZ2F3p6kMoGp1rcRBQkKCHOnhiQHo8ukpcSN63LhxePLkCR7+rRUIwGNZyfjKLRvrOgzEiOPfYE27fhh78jsgLRO49xio41r0t54HkF8ApGUBGVlAZQeggi2Q8wLIywNcqwEuVcQxA1Jt8J69J+bMmSO62blz56Ljj3OxN3gSJk2aBN3Y6Ga5ocJPQqwEtNLCLAlg55UnRVUXFxcB4KPRrQWAx7OT8WXNbIxpFIBANy+cTPkZK+OPonE1N1zpH4bdiRfx7e049PbxQ6tanqhQUICN52MRHtwbo/d9DRunyljh3wsOdvaw+XJaEYC/ZkACkP6jQgDuCZqIyZMnM4BWzpai8K9fvy5fhByZ1BEhkSf07JLHtMHZfgtxPDtFZEAq/w7+E949/PVL/j3hgDVdhqL/ga8UHVvKgLqVqQveGTgZ4eHhuHbtmnwR0rBhQ86AilS1skpKAEwcuBBJ6Y8wp1YuXYPA2a4iMvKKxoNqyuA7eejqWnx75XHyIww9/Sn+L2gqA6hGWGuyvXr1qgiXbnccnRyITiuO64WfMtYfLhVtcaVnOB7YVZef9452uiPXcz91E7ObhKg67TsJV/FBYlHm3BE4BVOmTIEUG33XqFEjzoCqFLZQY91Gjg0PQvDyY3qR1qlVEznX9G/NaHkqNhXssG7vCUydOpUB1FJoS/EdHx8vh3JsSjCClsXqhbZoUBBGvqG+u33pfAsBz3/FiYmwJcv27dsxbdo06MbWuHFjzoCWAo0p43gVgCnj2qGKqzv2tx+NS5cuwdbWFjVr1oSnp6ccBk3Pohkzhgp17S1bttT7qf7JjfB6HA+3/0lCcnIyA2jKBrU2XzQdXyrHp3ZC4NKj8lUxff/0o/aIfycSh5/dxXqX4mw1PccNKWeuibqbG1ZEmlvRvT1D5W04o2+mi95P3X6YIQDUHQLUqFFDjEW3bduGGTNmQDe20qbl831AayOuRLw0JZ8KNTwB2DHiCN5//3188MEHYnZ06vgOOP/HxYjNfCRuw7Sr6YnxjQOx5HIMLjy9j4BKbgip3xSLLx8sVYnmT/IwysEHERERmDBhAuzt7dFx7wJ4/vMi6Crczc0NeXl58gUOdcEEoBQbOW7atCl3wVbOmsHwL18ufqR2cnpnBCw5LOodO3ZMvIfxbEKA3o1o6UlIVMAgDD+2XQD4bb8R2HkzDkEe3niBArzpWA3fXDmFWUmx+CXrGXQBfPr0KRYtWoRWexbiD1EX9ACUZlgTgDNnzoRubM2aNWMAywuA1N3Vrl0b+/btkwGUHsV19fDFXxq0xYbEM9hzP6EoA75ZH39u0h5VbexQ9x8zsaR9HwxrHQz37YuEZBKAa9euxciRI8V3jX9cjObrzzGAv0eoXuec6MJCKqdmdEGHxYfkMSCN79InBooMGJNxH5vdi2a/lPYkpLTj+txNx6Tq+l0ojQFd1yeIx21SF0zdsDQGnDVrlrjokYqfnx9nwNdpWGupWxLA9oti9EInAHNa90G8ZyBmXo9GWmYuCt+oiXxv/SnzdocuALa2L5/2izxEdf8zMtPSi3+LP4put3YLAHVnPUsVqAtmAK2FIJVx0u0TaULq6Zld0W6h/sVExsQguDjYIt++EmL8/4rLCUUzqGOcC3Atu2iCaru0QrR0qvHKSJ6/yMPI3BOokpMq6lb/51U8evToJTsCcPbs2bhw4YL8LLhFixacAV+psBVWeBWA7u7ucHSsbPozK4R4tfP5r5NadQ/AAJpebov1eP78eTm2s7O6o+2CA3pjwIPDO+Kt2hWRV9ERPw9fC9jaifrGrp5w6XA0+l2Mko+ZuyBG73jSGJDmBurGVvJmtuSA7wNaLFrKAisJoP/8/XqGWeGdgKB38F2WK2693RzPC/JR294BTS4UP8FITU3FmY51Sz1gRlI8+ue+ofd725hIVM1KQc78l+8fUgZkAJW1n9XXOnfunHwO52b3QJtP9umdU/aUEHEVvPfRDezwLsp+VHq/2RCVbO3Fv48k38LDbHpfpPSy0d4PaanP5Aov0lPx1pGlyP7kgFibhgqtwuDq6goCcN68edCNrVWrVgadcwa0cgQNAUhT8h8+fIiwsDBIAB7LTsZXv86Iru/sgoc5mXpPP171REQCcPTo0fj888/FbOshJ5YzgFbOj+rwz549K/s4P6cnWs+LFmOylStXYvz48cid1kXvnZAV/n0QEXcQYU06IfzMbgz0aAiPHOBczpOiR3LbvsT96Z/j3L1bCPZpjCr/ni38f2Xnh/Rnz1ASwKx5+2FnZyduu4wZM0ZkQHoWPH/+fOjG1rp1a86AqlvbAh2cOXNGjurC3P9Aq7l7UaVKFdBrkJQdJQCld0JcHBzFC0lhp7/Hg+wMDKzbDNs7h2LgwY3YGhKK5NxMeFRyxg93r6PXvvWy75Jd8OPHjzH05Apkzt0n1gCkQuvU0Lso1AUTgLqx0aJIhgp3wRYI1euEdPp08WTTi/PeQss5e/TMn0/virghy7HhaiyO+NUSvxnzWuaWyq2RkpIi+7a7dgwhN75Hxpxo5Obmiu9zcnJQrVo1AeCCBQugG5u/vz8D+DoNay11lQBY1ckJMd1nikxFM1l+KczBxNziiaxIfobNnp1LPWUCLCOj+CJFeveDDAjAkoUBtBZ6TBDnqVOnZC+XPnkbzWf9KD5LS2I4rQ9DhZ+LpmyZutjVqIUn44reA9FdT5AApBkzurG1bduWM6CpG8AS/JUGoDljYwDNqX4ZH/vkyZPyk4jL83vB7+MfyjiClw9HANLywCdOnJAzI63caqjwRYjZm0tdANTIUhcoAVjaYzat1oAu6ZduwyxZskQAKBUGUF07W6z18ePF7wFfWdgHTWfsemlMVnKMpvVnyoA0fV83tg4dOnAGtFiKVARWGoAqXKo2ZQBVS2g9DujdD6nEL+qLJtO/N3vwBODSpUvFeylS4X1CzN4s2gRgCMDS9v0oq+9pDLhs2TIGUJsmtyyvsbGx8lXw1cX90Gjqd2YPkDLg8uXLcfToUfkqODAwkMeAZm8ZDQKgRpbKtSX9LQ5AKTYGUIPGtwSXR44ckcO4HvFHNJzyrdGznSVHxs6WluypC46MjIRubEFBQZwBLQEYU8fwWwCW1ZjP0H1ABtDULW2h/g4fLloJgUrC0gFoMHmH2SOlMSDNR9SNLTg4mDOg2VtGgwCokaUMZGkAHjp0SL4I6dSpEwOoQfub3WVMTNGL6DQbJXHZQNSf9M1Lb6mVdVdMY8BVq1ZBio3iox08DRV+Fmx2hNQFwACq04+tVSpA+wBL5caKwfAJ26bSo3pzGgOuXr1a7FEslc6dDU945QyoXm+zemAAzSo/H/zAgQOyCDcjh8B7wlYxBkxPTy+TsSC9A2LoNsxnn30G3dhosUweA/4OeS0JYL3xW+Dk5CS/qWbqU05LSxPrDuoWmmpVcko+A2hq5S3U3/79++UMdGvlUHh9tFmsVEBZSUmhhSyp3L9/X0l1AVp0tP6LSLRMr26h/wHo5XUCVQKzW7dunAEVKWxllXSz0e1P3xEA0ltslIG0KB07dtRzS2/a0Yqsw4YNE99v2LBBvJYpAShVZgC1aA0L8Kmbje6s+hPq/vfXoG6SZskQLARIWd4HpGe+tJD5F198oZcpu3fvzhnQAngxeQglAfQc97/w8fERu1WOGjVKdIFUdMdo9HnLli0YMmSI/D3tH0KLjFM9ss/Ozpa7ZZpc6ujoKJbekEpJf/SZZrzQs2nKgAygyZvaMh3u3btXDuzn1f8J37+sxptN24nVqWhOnu76LLpnQABGRUWhcuXKYkcjeruuT58+YsOaOnXqiA1tqNBWC5RBnz9/DgcHh1JFoMxH8IkM+NE4rP1HFHRj69GjB2dAy0RIXVTUyFIXSwA+8O0Hn/Y9QS+C79mzB76+vqUegNZxoSUzaNUDAoz+0q5J3t7eYosF2niGLk5oJayePXsKf4aKLnwEof3uj9Fl5QlRX8qUZG+o8I1ode1vdmtaio223qJy97NQDG3siGi/j5Fp4yhWqirZZUpAGOpCDY0VX2VP+wDTvsDSX8cK+Wgd/Tc4L7mDn376SZjfvHlTDAcYQLPjYvoAdu7ciYoVKwrHj3dFol/loq27Lr1wx7280rffMnUkiXmu+C+nc3C2LdoYMTPslLxEL2XXvn37MoCmFt1S/NEVL20a+FtjNHPESlfjtDp+abulU0zcBZujZfiYxUODQqW3zFk0VkADBTgDaiAqu1SuAAOoXCuuqYECDKAGorJL5QowgMq14poaKMAAaiAqu1SuAAOoXCuuqYECDKAGorJL5QowgMq14poaKMAAaiAqu1SuAAOoXCuuqYECDKAGorJL5QowgMq14poaKMAAaiAqu1SuAAOoXCuuqYECDKAGorJL5QowgMq14poaKMAAaiAqu1SuAAOoXCuuqYECDKAGorJL5QowgMq14poaKMAAaiAqu1SuAAOoXCuuqYECDKAGorJL5QowgMq14poaKMAAaiAqu1SuAAOoXCuuqYECDKAGorJL5QowgMq14poaKMAAaiAqu1SuAAOoXCuuqYECDKAGorJL5QowgMq1kmsOGjRIbEVAm8Hobl1ghKtyb8IAviYCqampqF69urCinSpLbkNK6yFv3LgRH3744Wt6Lp/VGcDXbPcRI0Zg3bp1Bq10f9u6davYCIbLbyvAABpJyObNm2FnZwfqjksrtFnMrFmzjDxC+TBjAI1oZ8qAlO10C31HWxFIu08a4bZcmjCARjQ7XXiU3I1S9zvaZWjVqlWldtVGHPJ3a8IA/m6b1jpOjAE0sp10M56hjGik23JnxgAa2eRr167FyJEjhbXuv410V27NGMBy2/SWceIMoIp2GDx4sLDetm2bCi/l25QBVNH+t2/fFtZeXl4qvJRvUwawfLe/2c+eAVTRBL179xbWu3btUuGlfJsygCraf8CAAcJ6x44dKryUb1MGUEX7M4AqxPvVlAE0UsOEhASEh4cL64iICDRo0MBIT+XbjAE0sv3btGmDunXrCuvr168jLi7OSE/l24wBNLL9pe5XMudxoHFCMoDG6QYG0EjhSpgxgEbouGnTJvH0Q8p67777LuiWTGhoqBHeyrcJA2hE+9epUwf37t3Ts/T19UVSUpIR3sq3yf8DvCoIPl39TXUAAAAASUVORK5CYII=</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="0" y="-150" 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="51" y="47"><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="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="730" y="413"><custom-block s="DownUp %s"><l>Sun</l></custom-block></script></scripts></sprite><watcher var="shapes" style="normal" x="336" y="3" color="243,118,29" extX="101" extY="169"/></sprites></stage><variables><variable name="shapes"><list id="874"><item><context id="875"><inputs></inputs><variables></variables><script><custom-block s="square" scope="local"></custom-block></script><receiver><ref id="725"></ref></receiver><origin></origin><context id="879"><inputs></inputs><variables></variables><receiver><ref id="725"></ref></receiver><origin></origin></context></context></item><item><context id="881"><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="885"><inputs></inputs><variables></variables><script><custom-block s="star" scope="local"></custom-block></script><receiver><ref id="725"></ref></receiver><origin></origin></context></item></list></variable></variables></scene></scenes></project><media name="vee" app="Snap! 10.7.2, https://snap.berkeley.edu" version="2"></media></snapdata>