From 88a8a5a2f40a1ed0f949666be20c1c9908e1c5d6 Mon Sep 17 00:00:00 2001 From: brianharvey Date: Sat, 25 Jul 2020 21:46:48 -0700 Subject: [PATCH] Condense libraries, add help texts. --- libraries/LIBRARIES | 8 ++------ libraries/bignumbers.xml | 2 +- libraries/cases.xml | 2 +- libraries/colors.xml | 2 +- libraries/crayons.xml | 1 - libraries/httpBlocks.xml | 2 +- libraries/iteration-composition.xml | 2 +- libraries/json.xml | 1 - libraries/list-utilities.xml | 2 +- libraries/setrgb.xml | 1 - libraries/stream-tools.xml | 2 +- libraries/try-catch.xml | 2 +- 12 files changed, 10 insertions(+), 17 deletions(-) delete mode 100644 libraries/crayons.xml delete mode 100644 libraries/json.xml delete mode 100644 libraries/setrgb.xml diff --git a/libraries/LIBRARIES b/libraries/LIBRARIES index 710b26ef..c730b6c3 100644 --- a/libraries/LIBRARIES +++ b/libraries/LIBRARIES @@ -25,17 +25,13 @@ frequency_distribution_module.xml Frequency Distribution Analysis Analyze data f word-sentence.xml Words, sentences One of the big ideas in Logo that they left out of Scratch is thinking of text as structured into words and sentences, rather than just a string of characters. This library brings back that idea. strings.xml String processing Extract substrings of a string in various ways apl.xml APL primitives Adds features from the APL language supporting hyperblocks. -stream-tools.xml Streams (lazy lists) A variation on the list data type in which each list item aren't computed until it's needed, so you can construct million-item lists without really taking up all that time or memory, or even infinite-sized lists. (A block that reports all the prime numbers is included as an example.) +stream-tools.xml Streams (lazy lists) A variation on the list data type in which each list item isn't computed until it's needed, so you can construct million-item lists without really taking up all that time or memory, or even infinite-sized lists. (A block that reports all the prime numbers is included as an example.) See SICP 3.5 for a tutorial. bar-charts.xml Bar charts Takes a table (typically from a CSV data set) as input and reports a summary of the table grouped by the field in the specified column number. The remaining three inputs are used only if the field values are numbers, in which case they can be grouped into buckets (e.g., decades, centuries, etc.). Those three inputs specify the smallest and largest values of interest and, most importantly, the width of a bucket (10 for decades, 100 for centuries). If the field isn't numeric, leave these three inputs empty or set them to zero. In that case, each string value of the field is its own bucket, and they appear sorted alphabetically. The block reports a new table with three columns. The first column contains the bucket name or smallest number. The second column contains a nonnegative integer that says how many records in the input table fall into this bucket. The third column is a subtable containing the actual records from the original table that fall into the bucket. If your buckets aren't of constant width, or you want to group by some function of more than one field, load the "Frequency Distribution Analysis" library instead. +httpBlocks.xml Web services access (https) An extended version of the URL block that allows POST, PUT, and DELETE as well as GET requests, allows using the secure HTTPS protocol, and gives control over headers, etc. Also parses JSON data. make-variables.xml Create variables Create and manage global/sprite/script variables in a script ~ ~ ~ ~ ~ ~ -httpBlocks.xml Web services access (https) An extended version of the URL block that allows POST, PUT, and DELETE as well as GET requests, allows using the secure HTTPS protocol, and gives control over headers, etc. -json.xml Deal with JSON data Turn JSON strings into lists with the listify block, then retrieve data out of them by using the value at key block. -~ ~ -~ ~ -~ ~ HummingbirdBlocks.xml Hummingbird robotics Control the Hummingbird robotics kit processor leap-library.xml LEAP Motion controller Report hand positions from LEAP Motion controller (leapmotion.com). diff --git a/libraries/bignumbers.xml b/libraries/bignumbers.xml index eb4a4e88..a548252b 100644 --- a/libraries/bignumbers.xml +++ b/libraries/bignumbers.xml @@ -1 +1 @@ -call with True to turn on the entire Scheme numeric tower, including infinite-precision integers, exact rationals, and complex numbers; call with False to restore native JavaScript arithmetic.
pt:altera utilização de aritmética do Scheme para _
Provides Scheme arithmetic functions not in JavaScript
pt:_ de _ number? complex? real? rational? integer? exact? inexact? exact inexact finite? infinite? nan? numerator denominator real-part imag-part magnitude angle
\ No newline at end of file +call with True to turn on the entire Scheme numeric tower, including infinite-precision integers, exact rationals, and complex numbers; call with False to restore native JavaScript arithmetic.
pt:altera utilização de aritmética do Scheme para _
The factorial function, to make very large numbers, to demo bignums.
The identity function: reports its input. It's useful to get things like 3/4 or 5-2i into numeric input slots.
Provides Scheme arithmetic functions not in JavaScript
pt:_ de _ number? complex? real? rational? integer? exact? inexact? exact inexact finite? infinite? nan? numerator denominator real-part imag-part magnitude angle
\ No newline at end of file diff --git a/libraries/cases.xml b/libraries/cases.xml index d9e18713..5df390dc 100644 --- a/libraries/cases.xml +++ b/libraries/cases.xml @@ -1 +1 @@ -
pt:se _ , então _ _ test
pt:captura _ _ cont
pt:lança _ catchtag
pt:senão, se _ , então _
pt:senão, _
\ No newline at end of file +Multi-branched conditional. If the first (Boolean) input is True, then the script in the second (C-slot) input is run, and this block stops. Additional tests can be added by putting one or more ELSE IF blocks in the third (variadic) Boolean slot. Use the arrowheads to get the number of Boolean slots you need. Each ELSE IF block provides a Boolean slot for a condition to test and a script slot for what to do if the condition is True. You can put an ELSE block in the last Boolean input to CASES for a script to run if all the tests turn out False. As soon as a condition is True, no further tests are done and no further scripts are run.
pt:se _ , então _ _
pt:captura _ _ cont
pt:lança _ catchtag
For use with the CASES block. See its help message.
pt:senão, se _ , então _
For use with the CASES block. See its help message.
pt:senão, _
\ No newline at end of file diff --git a/libraries/colors.xml b/libraries/colors.xml index 26f267f5..916f5cc4 100644 --- a/libraries/colors.xml +++ b/libraries/colors.xml @@ -1 +1 @@ -
grays={ 0 black #000000=0 1 gray7 #121212=1 2 gray14 #242424=2 3 gray21 #363636=3 4 gray28 #484848=4 5 gray36 #5c5c5c=5 6 gray43 #6d6d6d=6 7 gray50 #7f7f7f=7 8 gray57 #919191=8 9 gray64 #a3a3a3=9 10 gray71 #b5b5b5=10 11 gray78 #c8c8c8=11 12 gray85 #dadada=12 13 gray92 #ececec=13 14 white #ffffff=14 } pinks={ 15 deep pink #ff1493=15 16 hot pink #ff69b4=16 17 bright pink #ff007f=17 18 raspberry #e30b5d=18 19 amaranth #e52b50=19 } reds={ 20 red #ff0000=20 21 burgundy #900020=21 22 cherry #990000=22 23 dark candy apple red #a40000=23 24 sanguine #c00000=24 25 maroon #800000=25 26 crimson #c90016=26 27 Lists #d94d11=27 28 candy apple red #ff0800=28 29 coquelicot #ff3800=29 } browns={ 30 saddle brown #8b4513=30 31 chocolate #7b3f00=31 32 kobicha #6b4423=32 33 sepia #704214=33 34 chestnut #954535=34 35 dark brown #654321=35 36 brown #964b00=36 37 golden brown #996515=37 38 cinnamon #b87333=38 39 copper #d2691e=39 } oranges={ 40 orange #ff7f00=40 41 Pantone orange #ff5800=41 42 pumpkin #ff7518=42 43 Variables #f3761d=43 44 Spanish orange #e86100=44 45 burnt orange #cc5500=45 46 sinopia #cb410b=46 47 ochre #cc7722=47 48 carrot #ed9121=48 49 tangerine #f28500=49 } yellows={ 50 yellow #ffff00=50 51 Control #e6a822=51 52 dark goldenrod #b8860b=52 53 goldenrod #daa520=53 54 saffron #f4c430=54 55 sandstorm #ecd540=55 56 mustard #ffdb58=56 57 gold #ffd700=57 58 egg yolk #fee33e=58 59 rubber duck #fbe108=59 } greens={ 60 lime #00ff00=60 61 apple green #8db600=61 62 Operators #62c213=62 63 forest green #228b22=63 64 green #008000=64 65 dark green #006400=65 66 dark pastel green #03c03c=66 67 emerald #50c878=67 68 mint #3eb489=68 69 Pen #00a178=69 } cyans={ 70 aqua (cyan) #00ffff=70 71 dark cyan #008b8b=71 72 cerulean #007ba7=72 73 iceberg #71a6d2=73 74 Sensing #0494dc=74 75 teal #008080=75 76 light sky blue #87cefa=76 77 deep sky blue #00bfff=77 78 dodger blue #1e90ff=78 79 azure #007fff=79 } blues={ 80 blue #0000ff=80 81 midnight blue #191970=81 82 dark powder blue #003399=82 83 cobalt #0047ab=83 84 denim #1560bd=84 85 navy blue #000080=85 86 steel blue #4682b4=86 87 Motion #4a6cd4=87 88 cornflower #6495ed=88 89 slate blue #6a5acd=89 } purples={ 90 violet #8000ff=90 91 Looks #8f56e3=91 92 grape #6f2da8=92 93 indigo #4b0082=93 94 x11 purple #a020f0=94 95 magenta (fuchia) #ff00ff=95 96 dark orchid #9932cc=96 97 Sound #cf4ad9=97 98 purple #7f007f=98 99 dark magenta #8b008b=99 }colorcolor1001123
pt:altera a cor da tua caneta para vermelho _ , verde _ e azul _ (0 a 255) 25500
pt:altera a cor da caneta para matiz _ , saturação _ e brilho _ (0 a 1) 0.30.70.6
pt:a cor da caneta em RGB (vermelho, verde e azul; 0 a 255)
pt:a cor da caneta em HSV (matiz, saturação e brilho, 0 a 1)
size color fair hue transparency X11/W3C name (3D color spaces)={ fair HSL={ fair hue fair saturation (HSL) fair lightness fair HSL vector } fair HSV={ fair hue fair saturation (HSV) fair value (brightness) fair HSV vector } HSL={ hue saturation (HSL) lightness HSL vector } HSV={ hue saturation (HSV) value (brightness) HSV vector } RGB (0-255)={ red green blue RGB vector RGB hex } }255100We have to do this last test to rule out the vector options, which aren't numbers; their code makes three recursive calls and we catch range issues then.sizehueHSLHSV✐ fair?falsesaturation (HSV)value (brightness)transparencyred✐ last set asRGB✐ fair?falsegreen✐ last set asRGB✐ fair?falseblue✐ last set asRGB✐ fair?falsefair huevalue100color3.6index1index-1scale1255fromto1newHSVHSL✐ fair?truefair huecolorColorcolor300index15scale15grayscale15255fromto12✐ last set ascolor✐ fair?falsesaturation (HSL)lightnessfair saturation (HSV)22✐ last set asHSV✐ fair?truefair value (brightness)33✐ last set asHSV✐ fair?truefair saturation (HSL)✐ last set asHSL2222✐ fair?truefair lightness✐ last set asHSL3333✐ fair?truefair HSL vectorfair HSV vectorHSL vectorHSV vectorRGB vectorRGB hex01566red1612green1634blue1656X11/W3C nameX11/W3C namevaluetruex11w3c44partial matches4matchhead matchesSUBSET throws here if it handles a unique match
1
HSVHSV100
size crayon color fair hue transparency X11/W3C name (3D color spaces)={ fair HSL={ fair hue fair saturation (HSL) fair lightness fair HSL vector } fair HSV={ fair hue fair saturation (HSV) fair value (brightness) fair HSV vector } HSL={ hue saturation (HSL) lightness HSL vector } HSV={ hue saturation (HSV) value (brightness) HSV vector } RGB (0-255)={ red green blue RGB vector RGB hex } }huesaturation (HSV)value (brightness)transparencyRGB vectorredgreenblueRGB hexHSV vectorHSL vectorsaturation (HSL)lightnesscolorfair huenot setfair saturation (HSL)not setfair lightnessnot setfair HSL vectornot setfair saturation (HSV)2not setfair value (brightness)3not setfair HSV vectornot setcrayonnot setX11/W3C namenot set
size crayon color fair hue transparency (3D color spaces)={ fair HSL={ fair hue fair saturation (HSL) fair lightness fair HSL vector } fair HSV={ fair hue fair saturation (HSV) fair value (brightness) fair HSV vector } HSL={ hue saturation (HSL) lightness HSL vector } HSV={ hue saturation (HSV) value (brightness) HSV vector } RGB (0-255)={ red green blue RGB vector RGB hex } }crayonRGB hexI don't know how to handle
pt:lança o erro _
Reports the part of the first string up to the first instance of the second string inside it. If the second string isn't found, reports the entire first string.
pt:o texto de _ antes de _
If input is TRUE, comparisons made by functions in the string library will be case-independent (so "FOO" = "foo"). This is the default. If input is FALSE, comparisons will be exact.
pt:altera comparações ignorando distinção minúsculas/maiúsculas para _
de:fange _ _ ca:agafa _ _ es:atrapar _ _ fr:attrape _ _ pt:captura _ _ cont3
de:wirf _ ca:llança _ es:lanzar _ fr:lance _ pt:lança _ catchtag
de:ignoriere _ ca:ignora _ es:ignorar _ fr:ignore _ pt:ignora _
true
This block creates new variables on the selected scope: global (for all sprites), sprite (for this sprite only) or script (only for that blocks stack) with the names given (in 'names' list). If there is already a variable with that name in that scope, it does nothing: no errors and no overwrites.
pt:cria as variáveis _ _ ca:crea les _ variables _ es:crear las _ variables _ de:erstellen _ var _ globalglobal sprite scripteach itemvar ide = this.parentThatIsA(IDE_Morph); ide.flushBlocksCache('variables'); // b/c of inheritance ide.refreshPalette();
This block reports "true" if there is a variable with this given name (input slot) in that context. It can be a global, sprite or script variable. Otherwise it reports "false".
pt:a variável _ existe ca:existeix la variable _ ? es:existe la variable _ ? de:existiert var _ ?
global✐ last set as✐ fair?✐ color scale✐ HSL✐ last crayon✐ last X11✐ raw HSL✐ raw HSV✐ last set asRGB✐ fair?false✐ raw HSV0100100
\ No newline at end of file +Reports one of 100 preselected colors, like a box of 100 crayons. The colors have names that are meant to be evocative. They are organized in families, more or less corresponding to spectral (rainbow) colors; the input slot has a two-level menu in which you can hover over a family name to see the colors of that family, each including a crayon number and an RGB value. See Appendix A of the Snap! Reference Manual for more details.
grays={ 0 black #000000=0 1 gray7 #121212=1 2 gray14 #242424=2 3 gray21 #363636=3 4 gray28 #484848=4 5 gray36 #5c5c5c=5 6 gray43 #6d6d6d=6 7 gray50 #7f7f7f=7 8 gray57 #919191=8 9 gray64 #a3a3a3=9 10 gray71 #b5b5b5=10 11 gray78 #c8c8c8=11 12 gray85 #dadada=12 13 gray92 #ececec=13 14 white #ffffff=14 } pinks={ 15 deep pink #ff1493=15 16 hot pink #ff69b4=16 17 bright pink #ff007f=17 18 raspberry #e30b5d=18 19 amaranth #e52b50=19 } reds={ 20 red #ff0000=20 21 burgundy #900020=21 22 cherry #990000=22 23 dark candy apple red #a40000=23 24 sanguine #c00000=24 25 maroon #800000=25 26 crimson #c90016=26 27 Lists #d94d11=27 28 candy apple red #ff0800=28 29 coquelicot #ff3800=29 } browns={ 30 saddle brown #8b4513=30 31 chocolate #7b3f00=31 32 kobicha #6b4423=32 33 sepia #704214=33 34 chestnut #954535=34 35 dark brown #654321=35 36 brown #964b00=36 37 golden brown #996515=37 38 cinnamon #b87333=38 39 copper #d2691e=39 } oranges={ 40 orange #ff7f00=40 41 Pantone orange #ff5800=41 42 pumpkin #ff7518=42 43 Variables #f3761d=43 44 Spanish orange #e86100=44 45 burnt orange #cc5500=45 46 sinopia #cb410b=46 47 ochre #cc7722=47 48 carrot #ed9121=48 49 tangerine #f28500=49 } yellows={ 50 yellow #ffff00=50 51 Control #e6a822=51 52 dark goldenrod #b8860b=52 53 goldenrod #daa520=53 54 saffron #f4c430=54 55 sandstorm #ecd540=55 56 mustard #ffdb58=56 57 gold #ffd700=57 58 egg yolk #fee33e=58 59 rubber duck #fbe108=59 } greens={ 60 lime #00ff00=60 61 apple green #8db600=61 62 Operators #62c213=62 63 forest green #228b22=63 64 green #008000=64 65 dark green #006400=65 66 dark pastel green #03c03c=66 67 emerald #50c878=67 68 mint #3eb489=68 69 Pen #00a178=69 } cyans={ 70 aqua (cyan) #00ffff=70 71 dark cyan #008b8b=71 72 cerulean #007ba7=72 73 iceberg #71a6d2=73 74 Sensing #0494dc=74 75 teal #008080=75 76 light sky blue #87cefa=76 77 deep sky blue #00bfff=77 78 dodger blue #1e90ff=78 79 azure #007fff=79 } blues={ 80 blue #0000ff=80 81 midnight blue #191970=81 82 dark powder blue #003399=82 83 cobalt #0047ab=83 84 denim #1560bd=84 85 navy blue #000080=85 86 steel blue #4682b4=86 87 Motion #4a6cd4=87 88 cornflower #6495ed=88 89 slate blue #6a5acd=89 } purples={ 90 violet #8000ff=90 91 Looks #8f56e3=91 92 grape #6f2da8=92 93 indigo #4b0082=93 94 x11 purple #a020f0=94 95 magenta (fuchia) #ff00ff=95 96 dark orchid #9932cc=96 97 Sound #cf4ad9=97 98 purple #7f007f=98 99 dark magenta #8b008b=99 }colorcolor1001123
Takes three inputs for red, green, and blue values, each between 0 and 255. 0,0,0 is black; 255,255,255 is white. 255,255,0 is yellow, and so on. The SET PEN block in this library lets you set individual red, green, or blue without changing the others, lets you provide a list of three RGB color components, and lets you provide a six-digit hexadecimal number, the form in which RGB color values are usually found online. See Appendix A of the Snap! Reference Manual for details.
pt:altera a cor da tua caneta para vermelho _ , verde _ e azul _ (0 a 255) 25500
Takes three inputs for hue, saturation, and value ("brightness") values, each between 0 and 1. 0,0,0 is black; 0,0,1 is white. 0.15,1,1 is yellow, and so on. The SET PEN block in this library lets you set individual hue, saturation, or value without changing the others, lets you provide a list of three HSV color components, and lets you use the very much superior HSL (hue, saturation, lightness) color space. See Appendix A of the Snap! Reference Manual for details.
pt:altera a cor da caneta para matiz _ , saturação _ e brilho _ (0 a 1) 0.30.70.6
Reports the current pen color as a list of three RGB values in the range 0-255. The PEN block in this library provides a large set of ways to examine the color. See Appendix A in the Snap! Reference Manual for details.
pt:a cor da caneta em RGB (vermelho, verde e azul; 0 a 255)
Reports the current pen color as a list of three HSV values in the range 0-1. See Appendix A in the Snap! Reference Manual for details.
pt:a cor da caneta em HSV (matiz, saturação e brilho, 0 a 1)
This block allows you to set the pen's color, transparency (on a scale from 0=opaque to 100=invisible), or size (in pixels). The color can be set in many ways, including RGB values, HSV values, HSL values, fair HSV or HSL (based on a modified spectrum that gives each spectral color equal space and promotes brown to a color), or X11/W3C color name. See Appendix A in the Snap! Reference Manual for details.
size color fair hue transparency X11/W3C name (3D color spaces)={ fair HSL={ fair hue fair saturation (HSL) fair lightness fair HSL vector } fair HSV={ fair hue fair saturation (HSV) fair value (brightness) fair HSV vector } HSL={ hue saturation (HSL) lightness HSL vector } HSV={ hue saturation (HSV) value (brightness) HSV vector } RGB (0-255)={ red green blue RGB vector RGB hex } }255100We have to do this last test to rule out the vector options, which aren't numbers; their code makes three recursive calls and we catch range issues then.sizehueHSLHSV✐ fair?falsesaturation (HSV)value (brightness)transparencyred✐ last set asRGB✐ fair?falsegreen✐ last set asRGB✐ fair?falseblue✐ last set asRGB✐ fair?falsefair huevalue100color3.6index1index-1scale1255fromto1newHSVHSL✐ fair?truefair huecolorColorcolor300index15scale15grayscale15255fromto12✐ last set ascolor✐ fair?falsesaturation (HSL)lightnessfair saturation (HSV)22✐ last set asHSV✐ fair?truefair value (brightness)33✐ last set asHSV✐ fair?truefair saturation (HSL)✐ last set asHSL2222✐ fair?truefair lightness✐ last set asHSL3333✐ fair?truefair HSL vectorfair HSV vectorHSL vectorHSV vectorRGB vectorRGB hex01566red1612green1634blue1656X11/W3C nameX11/W3C namevaluetruex11w3c44partial matches4matchhead matchesSUBSET throws here if it handles a unique match
1
HSVHSV100
The identity function reports its input.
This block reports the pen size, color, or transparency, in all the same ways that the SET PEN block allows you to set those pen properties. (It will also report the current crayon number, if the pen color was most recently set with SET PEN TO CRAYON.) See Appendix A of the Snap! Reference Manual for details.
size crayon color fair hue transparency X11/W3C name (3D color spaces)={ fair HSL={ fair hue fair saturation (HSL) fair lightness fair HSL vector } fair HSV={ fair hue fair saturation (HSV) fair value (brightness) fair HSV vector } HSL={ hue saturation (HSL) lightness HSL vector } HSV={ hue saturation (HSV) value (brightness) HSV vector } RGB (0-255)={ red green blue RGB vector RGB hex } }huesaturation (HSV)value (brightness)transparencyRGB vectorredgreenblueRGB hexHSV vectorHSL vectorsaturation (HSL)lightnesscolorfair huenot setfair saturation (HSL)not setfair lightnessnot setfair HSL vectornot setfair saturation (HSV)2not setfair value (brightness)3not setfair HSV vectornot setcrayonnot setX11/W3C namenot set
Takes a value from 0 to 15 and reports the corresponding hexadecimal digit. For internal use of the color library.
Changes any pen property by the specified amount. Some color scales can't be adjusted this way unless the color was first SET using that scale. Vectors (e.g., RGB color as a list of three numbers) can be incremented by a vector as the amount. X11/W3C names can't be incremented.
size crayon color fair hue transparency (3D color spaces)={ fair HSL={ fair hue fair saturation (HSL) fair lightness fair HSL vector } fair HSV={ fair hue fair saturation (HSV) fair value (brightness) fair HSV vector } HSL={ hue saturation (HSL) lightness HSL vector } HSV={ hue saturation (HSV) value (brightness) HSV vector } RGB (0-255)={ red green blue RGB vector RGB hex } }crayonRGB hexI don't know how to handle
pt:lança o erro _
Reports the part of the first string up to the first instance of the second string inside it. If the second string isn't found, reports the entire first string.
pt:o texto de _ antes de _
If input is TRUE, comparisons made by functions in the string library will be case-independent (so "FOO" = "foo"). This is the default. If input is FALSE, comparisons will be exact.
pt:altera comparações ignorando distinção minúsculas/maiúsculas para _
de:fange _ _ ca:agafa _ _ es:atrapar _ _ fr:attrape _ _ pt:captura _ _ cont3
de:wirf _ ca:llança _ es:lanzar _ fr:lance _ pt:lança _ catchtag
de:ignoriere _ ca:ignora _ es:ignorar _ fr:ignore _ pt:ignora _
Don't ask. Only for internal use by the SET PEN block.
true
This block creates new variables on the selected scope: global (for all sprites), sprite (for this sprite only) or script (only for that blocks stack) with the names given (in 'names' list). If there is already a variable with that name in that scope, it does nothing: no errors and no overwrites.
pt:cria as variáveis _ _ ca:crea les _ variables _ es:crear las _ variables _ de:erstellen _ var _ globalglobal sprite scripteach itemvar ide = this.parentThatIsA(IDE_Morph); ide.flushBlocksCache('variables'); // b/c of inheritance ide.refreshPalette();
This block reports "true" if there is a variable with this given name (input slot) in that context. It can be a global, sprite or script variable. Otherwise it reports "false".
pt:a variável _ existe ca:existeix la variable _ ? es:existe la variable _ ? de:existiert var _ ?
Creates a bunch of global variables. For internal use by Color library.
global✐ last set as✐ fair?✐ color scale✐ HSL✐ last crayon✐ last X11✐ raw HSL✐ raw HSV✐ last set asRGB✐ fair?false✐ raw HSV0100100
\ No newline at end of file diff --git a/libraries/crayons.xml b/libraries/crayons.xml deleted file mode 100644 index edf00146..00000000 --- a/libraries/crayons.xml +++ /dev/null @@ -1 +0,0 @@ -
grays={ 0 black #000000=0 1 gray7 #121212=1 2 gray14 #242424=2 3 gray21 #363636=3 4 gray28 #484848=4 5 gray36 #5c5c5c=5 6 gray43 #6d6d6d=6 7 gray50 #7f7f7f=7 8 gray57 #919191=8 9 gray64 #a3a3a3=9 10 gray71 #b5b5b5=10 11 gray78 #c8c8c8=11 12 gray85 #dadada=12 13 gray92 #ececec=13 14 white #ffffff=14 } pinks={ 15 deep pink #ff1493=15 16 hot pink #ff69b4=16 17 bright pink #ff007f=17 18 raspberry #e30b5d=18 19 amaranth #e52b50=19 } reds={ 20 red #ff0000=20 21 burgundy #900020=21 22 cherry #990000=22 23 dark candy apple red #a40000=23 24 sanguine #c00000=24 25 maroon #800000=25 26 crimson #c90016=26 27 Lists #d94d11=27 28 candy apple red #ff0800=28 29 coquelicot #ff3800=29 } browns={ 30 saddle brown #8b4513=30 31 chocolate #7b3f00=31 32 kobicha #6b4423=32 33 sepia #704214=33 34 chestnut #954535=34 35 dark brown #654321=35 36 brown #964b00=36 37 golden brown #996515=37 38 copper #b87333=38 39 cinnamon #d2691e=39 } oranges={ 40 orange #ff7f00=40 41 Pantone orange #ff5800=41 42 pumpkin #ff7518=42 43 Variables #f3761d=43 44 Spanish orange #e86100=44 45 burnt orange #cc5500=45 46 sinopia #cb410b=46 47 ochre #cc7722=47 48 carrot #ed9121=48 49 tangerine #f28500=49 } yellows={ 50 yellow #ffff00=50 51 Control #e6a822=51 52 dark goldenrod #b8860b=52 53 goldenrod #daa520=53 54 saffron #f4c430=55 55 sandstorm #ecd540=55 56 mustard #ffdb58=56 57 gold #ffd700=57 58 egg yolk #fee33e=58 59 rubber duck #fbe108=59 } greens={ 60 lime #00ff00=60 61 apple green #8db600=61 62 Operators #62c213=62 63 forest green #228b22=63 64 green #008000=64 65 dark green #006400=65 66 dark pastel green #03c03c=66 67 emerald #50c878=67 68 mint #3eb489=68 69 Pen #00a178=69 } cyans={ 70 aqua (cyan) #00ffff=70 71 dark cyan #008b8b=71 72 cerulean #007ba7=72 73 iceberg #71a6d2=73 74 Sensing #0494dc=74 75 teal #008080=75 76 light sky blue #87cefa=76 77 deep sky blue #00bfff=77 78 dodger blue #1e90ff=78 79 azure #007fff=79 } blues={ 80 blue #0000ff=80 81 midnight blue #191970=81 82 dark powder blue #003399=82 83 cobalt #0047ab=83 84 denim #1560bd=84 85 navy blue #000080=85 86 steel blue #4682b4=86 87 Motion #4a6cd4=87 88 cornflower #6495ed=88 89 slate blue #6a5acd=89 } violets={ 90 violet #8f00ff=90 91 Looks #8f56e3=91 92 grape #6f2da8=92 93 indigo #4b0082=93 94 x11 purple #a020f0=94 95 magenta (fuchia) #ff00ff=95 96 dark orchid #9932cc=96 97 Sound #cf4ad9=97 98 purple #7f007f=98 99 dark magenta #8b008b=99 }global*current crayon**current crayon*100color1123
25500
This block creates new variables on the selected scope: global (for all sprites), sprite (for this sprite only) or script (only for that blocks stack) with the names given (in 'names' list). If there is already a variable with that name in that scope, it does nothing: no errors and no overwrites.
pt:cria as variáveis _ _ ca:crea les _ variables _ es:crear las _ variables _ de:erstellen _ var _ globalglobal sprite scripteach itemvar ide = this.parentThatIsA(IDE_Morph); ide.flushBlocksCache('variables'); // b/c of inheritance ide.refreshPalette();
This block reports "true" if there is a variable with this given name (input slot) in that context. It can be a global, sprite or script variable. Otherwise it reports "false".
pt:a variável _ existe ca:existeix la variable _ ? es:existe la variable _ ? de:existiert var _ ?
\ No newline at end of file diff --git a/libraries/httpBlocks.xml b/libraries/httpBlocks.xml index 760dd389..56708ecd 100644 --- a/libraries/httpBlocks.xml +++ b/libraries/httpBlocks.xml @@ -1 +1 @@ -
pt:a resposta a _ de _ enviando _ e cabeçalhos _ GETGET POST PUT DELETEhttps://snap.berkeley.edu
pt:um par (chave: _ , valor: _ )
Reports a three-item list containing the latitude and longitude of the user, and the precision of the measurements. Works only if the user allows snap.berkeley.edu access to location data. Some browsers also require an HTTPS connection to Snap!.
pt:a localização actual do dispositivo
\ No newline at end of file +
pt:os dados JSON _ em formato de lista
pt:o valor com chave _ em _
pt:a resposta a _ de _ enviando _ e cabeçalhos _ GETGET POST PUT DELETEhttps://snap.berkeley.edu
pt:um par (chave: _ , valor: _ )
Reports a three-item list containing the latitude and longitude of the user, and the precision of the measurements. Works only if the user allows snap.berkeley.edu access to location data. Some browsers also require an HTTPS connection to Snap!.
pt:a localização actual do dispositivo
\ No newline at end of file diff --git a/libraries/iteration-composition.xml b/libraries/iteration-composition.xml index efea4851..c44b846d 100644 --- a/libraries/iteration-composition.xml +++ b/libraries/iteration-composition.xml @@ -1 +1 @@ -
de:fange _ _ ca:agafa _ _ es:atrapar _ _ fr:attrape _ _ pt:captura _ _ cont
de:wirf _ ca:llança _ es:lanzar _ fr:lance _ pt:lança _ catchtag
de:fange _ _ ca:agafa _ _ es:atrapar _ _ fr:attrape _ _ pt:captura _ _ cont
de:wirf _ _ ca:llança _ _ es:lanzar _ _ fr:lance _ _ pt:lança _ _ catchtag
de:falls _ dann _ und pause $pause-1-255-220-0 ca:si _ fes _ i atura-ho tot $pause-1-255-220-0 es:si _ haz _ y páralo todo $pause-1-255-220-0 fr:si _ faire _ et mettre tout en pause $pause-1-255-220-0 pt:se _ , então _ e faz pausa em tudo $pause-1-255-220-0
de:ignoriere _ ca:ignora _ es:ignorar _ fr:ignore _ pt:ignora _
Call f(f(f(...(f(x))))) n times where the three input slots are n, f, and x from left to right. The # variable can be used inside f to represent how many times f has been called.
pt:o resultado de _ invocações em cascata de _ com argumento inicial _ _
Call f(f(f(...(f(x))))) until condition is true, where the three input slots are condition, f, and x from left to right. The # variable can be used inside f or condition to indicate how many times f has been called.
pt:o resultado da invocação em cascata até que _ de _ com argumento inicial _ _
Returns the function f(g(x)) where f and g are the two inputs.
pt:a composição de _ com _
Like the built-in REPEAT UNTIL block, except that the ending condition is not tested until the script has been run the first time. So the script is run at least once.
pt:repete _ até que _ $loop-0.7
Run the script repeatedly, as long as the given condition is true. Runs the script at least once before testing the condition.
pt:repete _ enquanto _ $loop-0.7
Runs the script repeatedly, as long as the condition is true. Tests the condition before the first time the script is run. Like the built in REPEAT UNTIL except that in this block the condition must be true, not false.
pt:enquanto _ , repete _ $loop-0.7
Runs the script the specified number of times, like the built-in REPEAT block, but this one provides the # variable that can be used inside the script. Try REPEAT (200) MOVE (#) STEPS RIGHT 92 with the pen down.
pt:repete _ vezes _ _ $loop-0.7
pt:para _ de _ com passo _ a _ _ $loop-0.7 1110
Provides LOOP as a function of one input that runs the body of the LET with A set to the function input, so the body can run itself recursively. See COPY block in Variables for an example of use.
pt:tendo _ o valor inicial _ , executa _ definido como _ new value
\ No newline at end of file +
de:fange _ _ ca:agafa _ _ es:atrapar _ _ fr:attrape _ _ pt:captura _ _ cont
de:wirf _ ca:llança _ es:lanzar _ fr:lance _ pt:lança _ catchtag
de:fange _ _ ca:agafa _ _ es:atrapar _ _ fr:attrape _ _ pt:captura _ _ cont
de:wirf _ _ ca:llança _ _ es:lanzar _ _ fr:lance _ _ pt:lança _ _ catchtag
This is a breakpoint block, to be used in debugging. The Boolean input specifies the condition under which the program should pause. (Use True for an unconditional breakpoint.) The intent is that the script should have SHOW VARIABLE blocks for the process's local variables. After the pause, this block automatically hides all temporary variables.
de:falls _ dann _ und pause $pause-1-255-220-0 ca:si _ fes _ i atura-ho tot $pause-1-255-220-0 es:si _ haz _ y páralo todo $pause-1-255-220-0 fr:si _ faire _ et mettre tout en pause $pause-1-255-220-0 pt:se _ , então _ e faz pausa em tudo $pause-1-255-220-0
This block does nothing. Use it when you are calling a reporter for its side effect and don't care about its return value.
de:ignoriere _ ca:ignora _ es:ignorar _ fr:ignore _ pt:ignora _
Call f(f(f(...(f(x))))) n times where the three input slots are n, f, and x from left to right. The # variable can be used inside f to represent how many times f has been called.
pt:o resultado de _ invocações em cascata de _ com argumento inicial _ _
Call f(f(f(...(f(x))))) until condition is true, where the three input slots are condition, f, and x from left to right. The # variable can be used inside f or condition to indicate how many times f has been called.
pt:o resultado da invocação em cascata até que _ de _ com argumento inicial _ _
Returns the function x↦f(g(x)) where f and g are the two inputs.
pt:a composição de _ com _
Like the built-in REPEAT UNTIL block, except that the ending condition is not tested until the script has been run the first time. So the script is run at least once.
pt:repete _ até que _ $loop-0.7
Run the script repeatedly, as long as the given condition is true. Runs the script at least once before testing the condition.
pt:repete _ enquanto _ $loop-0.7
Runs the script repeatedly, as long as the condition is true. Tests the condition before the first time the script is run. Like the built in REPEAT UNTIL except that in this block the condition must be true, not false.
pt:enquanto _ , repete _ $loop-0.7
Runs the script the specified number of times, like the built-in REPEAT block, but this one provides the # variable that can be used inside the script. Try REPEAT (200) MOVE (#) STEPS RIGHT 92 with the pen down.
pt:repete _ vezes _ _ $loop-0.7
The primitive FOR block uses an implicit step of ±1 depending on which of the starting and ending values is larger. This version allows you to provide an explicit step value. If the sign of the step input is incompatible with the ordering of the starting and ending values, the script will not be run at all.
pt:para _ de _ com passo _ a _ _ $loop-0.7 1110
Provides LOOP as a function of one input that runs the body of the LET with A set to the function input, so the body can run itself recursively. See COPY block in Variables for an example of use.
pt:tendo _ o valor inicial _ , executa _ definido como _ new value
The inputs are a starting value and one or more monadic functions. The first function is called with the starting value as its input. The second function is called with the value reported by the first function as its input, and so on. PIPE reports the value reported by the last function. PIPE provides an alternative notation for function composition instead of the usual nesting. nested acronym: report (combine (keep items (capital-letter? ( )) from (map (letter (1) of ( )) over (sentence→list (phrase)))) using (join ( ) ( ))) piped acronym: report (pipe (phrase) → (sentence→list ( )) (map (letter (1) of ( )) over ( )) (keep items (capital-letter? ( )) from ( )) (combine ( ) using (join ( ) ( ))) Some people find PIPE easier to read because the functions are called in the same order in which you read them, whereas in nested composition the innermost function is called first.
pt:a aplicação a _ de _ 1
\ No newline at end of file diff --git a/libraries/json.xml b/libraries/json.xml deleted file mode 100644 index b39d89fc..00000000 --- a/libraries/json.xml +++ /dev/null @@ -1 +0,0 @@ -
pt:os dados JSON _ em formato de lista
pt:o valor com chave _ em _
\ No newline at end of file diff --git a/libraries/list-utilities.xml b/libraries/list-utilities.xml index 1671dac6..2009b5be 100644 --- a/libraries/list-utilities.xml +++ b/libraries/list-utilities.xml @@ -1 +1 @@ -Reports a new list containing the items of the input list, but in the opposite order.
ca:capgira _ 1inputresult
Reports a new list whose items are the same as in the input list, except that if two or more equal items appear in the input list, only the last one is kept in the result.
ca:elimina els duplicats de _ 1
Reports a sorted version of the list in its first input slot, using the comparison function in the second input slot. For a list of numbers, using < as the comparison function will sort from low to high; using > will sort from high to low.
ca:ordena _ segons criteri _ copy of datasplitmerge11#1#2
The second input is an "association list," a list of two-item lists. Each of those smaller lists has a "key" as its first item and a "value" as its second. ASSOC reports the first key-value pair in the association list whose key matches the first input.
ca:associació _ _ 11
This block applies the given function to each item of the given list, like the primitive MAP block, but with two differences: 1. The # variable provided will contain the item number of the item currently being used in the given function: 1 for item 1, and so on. You read the variable in your function; don't set it. 2. You can provide more than one input list. If so, the lengths of all the lists should be the same, and the function you supply must expect as many inputs as you have lists (i.e., that many empty input slots in the function).
ca:_ mapeja _ sobre _ #11datacountmapmany##1#1data listscount
This block makes a new list containing selected items from the given list, like the primitive KEEP block. What's different is that it provides the # variable for use in your predicate function. It will contain the item number (in the original list) of the item being examined by the predicate.
ca:_ manté els elements on _ de _ #1datacount1
This block carries out the given script for each item of the given list, like the primitive FOR EACH. What's different is that it provides the # variable, which will contain the item number in the list of each item in turn, 1 while processing item 1, and so on.
ca:_ per cada _ de _ _
\ No newline at end of file +Reports a new list containing the items of the input list, but in the opposite order.
ca:capgira _ 1inputresult
Reports a new list whose items are the same as in the input list, except that if two or more equal items appear in the input list, only the last one is kept in the result.
ca:elimina els duplicats de _ 1
Reports a sorted version of the list in its first input slot, using the comparison function in the second input slot. For a list of numbers, using < as the comparison function will sort from low to high; using > will sort from high to low.
ca:ordena _ segons criteri _ copy of datasplitmerge11#1#2
The second input is an "association list," a list of two-item lists. Each of those smaller lists has a "key" as its first item and a "value" as its second. ASSOC reports the first key-value pair in the association list whose key matches the first input.
ca:associació _ _ 11
This block carries out the given script for each item of the given list, like the primitive FOR EACH. What's different is that it provides the # variable, which will contain the item number in the list of each item in turn, 1 while processing item 1, and so on.
ca:_ per cada _ de _ _
Takes as input a function of N inputs and N lists. The function is called with item 1 of all the lists as its inputs, with item 2 of all the lists as its inputs, and so on. (The lists should all be the same length.)
ZIP takes any number of lists as inputs. The lists should all be the same length. ZIP reports a list of lists in which the first item is a list of all the first items, the second item is a list of all the second items, etc. Viewing the inputs as the rows of a matrix, ZIP reports its transpose.
1
The identity function reports its input.
\ No newline at end of file diff --git a/libraries/setrgb.xml b/libraries/setrgb.xml deleted file mode 100644 index e1db47d0..00000000 --- a/libraries/setrgb.xml +++ /dev/null @@ -1 +0,0 @@ -
pt:altera a cor da tua caneta para vermelho _ , verde _ e azul _ (0 a 255) 25500
pt:altera a cor da caneta para matiz _ , saturação _ e brilho _ (0 a 1) 0.30.70.6
pt:a cor da caneta em RGB (vermelho, verde e azul; 0 a 255)
pt:a cor da caneta em HSV (matiz, saturação e brilho, 0 a 1)
\ No newline at end of file diff --git a/libraries/stream-tools.xml b/libraries/stream-tools.xml index 9222f2ab..9dcbfeee 100644 --- a/libraries/stream-tools.xml +++ b/libraries/stream-tools.xml @@ -1 +1 @@ -
pt:a prefixação de _ ao canal _
pt:o primeiro item do canal _
pt:um canal com todos os itens de _ menos o primeiro 423true4
pt:a aplicação de _ aos itens dos canais _
pt:os itens tais que _ do canal _
pt:uma lista com os itens do canal _ até ao _ º 1001
pt:um canal com _ 1
pt:a crivagem do canal _
pt:um canal com os números a partir de _ 1
\ No newline at end of file +The stream version of IN FRONT OF. Streams, also called lazy lists, are like lists except that items are not computed until they're needed. This allows for more efficient handling of large computed lists, and even infinite lists. The only piece of magic is here in IN FRONT OF STREAM, whose second input is of type Unevaluated, which means that it's a procedure, with a sort of invisible gray ring. So HEAD OF STREAM is just ITEM 1 OF, but TAIL OF STREAM has a CALL block to make the computation happen. For a tutorial introduction to streams, read SICP 3.5: https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5 or Brian's lecture notes (start on page 74): https://people.eecs.berkeley.edu/~bh/61a-pages/Volume2/notes.pdf The above are clickable links!
pt:a prefixação de _ ao canal _
The stream version of ITEM 1 OF. Streams, also called lazy lists, are like lists except that items are not computed until they're needed. This allows for more efficient handling of large computed lists, and even infinite lists. The only piece of magic is in IN FRONT OF STREAM, whose second input is of type Unevaluated, which means that it's a procedure, with a sort of invisible gray ring. So HEAD OF STREAM is just ITEM 1 OF, but TAIL OF STREAM has a CALL block to make the computation happen. For a tutorial introduction to streams, read SICP 3.5: https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5 or Brian's lecture notes (start on page 74): https://people.eecs.berkeley.edu/~bh/61a-pages/Volume2/notes.pdf The above are clickable links!
pt:o primeiro item do canal _
The stream version of ALL BUT FIRST OF. Streams, also called lazy lists, are like lists except that items are not computed until they're needed. This allows for more efficient handling of large computed lists, and even infinite lists. The only piece of magic is in IN FRONT OF STREAM, whose second input is of type Unevaluated, which means that it's a procedure, with a sort of invisible gray ring. So HEAD OF STREAM is just ITEM 1 OF, but TAIL OF STREAM has a CALL block to make the computation happen. For a tutorial introduction to streams, read SICP 3.5: https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5 or Brian's lecture notes (start on page 74): https://people.eecs.berkeley.edu/~bh/61a-pages/Volume2/notes.pdf The above are clickable links!
pt:um canal com todos os itens de _ menos o primeiro 423true4
The stream version of variadic MAP (any number of input lists, like MULTIMAP in the list utilities library). Streams, also called lazy lists, are like lists except that items are not computed until they're needed. This allows for more efficient handling of large computed lists, and even infinite lists. The only piece of magic is in IN FRONT OF STREAM, whose second input is of type Unevaluated, which means that it's a procedure, with a sort of invisible gray ring. So HEAD OF STREAM is just ITEM 1 OF, but TAIL OF STREAM has a CALL block to make the computation happen. For a tutorial introduction to streams, read SICP 3.5: https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5 or Brian's lecture notes (start on page 74): https://people.eecs.berkeley.edu/~bh/61a-pages/Volume2/notes.pdf The above are clickable links!
pt:a aplicação de _ aos itens dos canais _
The stream version of KEEP. Streams, also called lazy lists, are like lists except that items are not computed until they're needed. This allows for more efficient handling of large computed lists, and even infinite lists. The only piece of magic is in IN FRONT OF STREAM, whose second input is of type Unevaluated, which means that it's a procedure, with a sort of invisible gray ring. So HEAD OF STREAM is just ITEM 1 OF, but TAIL OF STREAM has a CALL block to make the computation happen. For a tutorial introduction to streams, read SICP 3.5: https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5 or Brian's lecture notes (start on page 74): https://people.eecs.berkeley.edu/~bh/61a-pages/Volume2/notes.pdf The above are clickable links!
pt:os itens tais que _ do canal _
The inputs are a stream and a positive integer. SHOW STREAM reports a regular finite list of length less than (for short finite streams) or equal to the second input. It's useful because an infinite stream can't be displayed in a finite amount of time.
pt:uma lista com os itens do canal _ até ao _ º 1001
Make a stream from a finite collection of items, like the LIST primitive. Since this block is typically used for small amounts of data, it does not delay computation of its inputs.
pt:um canal com _ 1
Call this block with STREAM WITH NUMBERS FROM 2 as its input to get the infinite stream of all the prime numbers. It's called SIEVE because the algorithm it uses is the Sieve of Eratosthenes (clickable link): https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes Look inside; it's a beautifully elegant algorithm. For a tutorial introduction to streams, read SICP 3.5: https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5 or Brian's lecture notes (start on page 74): https://people.eecs.berkeley.edu/~bh/61a-pages/Volume2/notes.pdf The above are clickable links!
pt:a crivagem do canal _
The stream version of NUMBERS FROM 1 TO, with no ending number because it reports the infinite stream of all the integers greater than or equal to its input. Read the code! It's deceptively simple. Streams, also called lazy lists, are like lists except that items are not computed until they're needed. This allows for more efficient handling of large computed lists, and even infinite lists. The only piece of magic is in IN FRONT OF STREAM, whose second input is of type Unevaluated, which means that it's a procedure, with a sort of invisible gray ring. So HEAD OF STREAM is just ITEM 1 OF, but TAIL OF STREAM has a CALL block to make the computation happen. For a tutorial introduction to streams, read SICP 3.5: https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5 or Brian's lecture notes (start on page 74): https://people.eecs.berkeley.edu/~bh/61a-pages/Volume2/notes.pdf The above are clickable links!
pt:um canal com os números a partir de _ 1
Read the code while running it,
\ No newline at end of file diff --git a/libraries/try-catch.xml b/libraries/try-catch.xml index 9a63daed..c42cc9c9 100644 --- a/libraries/try-catch.xml +++ b/libraries/try-catch.xml @@ -1 +1 @@ -
pt:tenta executar _ e, em caso de erro _ , executa _ return
pt:lança o erro _
pt:cria a variável de guião _ com valor _
err
\ No newline at end of file +Catch errors. Runs the first script. If it succeeds, nothing else happens. But if it has an error (something that would otherwise result in a red halo around the block), then the second script is run, with the text of the error message that would have been shown in the variable ERROR.
pt:tenta executar _ e, em caso de erro _ , executa _ return
Throw an error. Makes a red halo appear around the script that runs it, with the input text shown in a speech balloon next to the script, just like any Snap! error. This is useful to put in the second script of SAFELY TRY after some other instructions to undo the partial work of the first script.
pt:lança o erro _
LET (FOO) BE (5) is equivalent to SCRIPT VARIABLES (FOO) SET (FOO) TO (5)
pt:cria a variável de guião _ com valor _
Catch errors in a reporter. Evaluates its first input. If that expression successfully reports a value, this block reports that value. If the expression causes a Snap! error, then the final input slot is evaluated with the text of what would have been the error message in variable ERROR. SAFELY TRY then reports the value of that final expression. Sometimes you'll want to throw an error in the final expression. You can put an ERROR block inside a CALL block to do that.
err
\ No newline at end of file