Un syntaxege
- https://turing.cs.hbg.psu.edu/LOCAL/ucblogo/ucbl_7.htm
- https://fmslogo.sourceforge.io/manual/workspace-control.html
- https://www.calormen.com/jslogo/language.html
The section numbers are per the Berkeley Logo Reference Manual in Brian Harvey's Computer Science Logo Style volume 2: Advanced Techniques for ease of comparison.
Data Types and Syntax
"word'wordnumber- Word. (Quoted words are terminated by [](){} or whitespace, \ to escape.)
- show "hello
- show "hello\ logo
- show 12.34
:variable- Input definition/variable reference
- show :name
[ word ... ]- List of words or lists, whitespace separated
- show [1 2 3]
{ word ... }{ word ... }@origin- Array of words, whitespace separated
- show {1 2 3}
( expression )- Parenthesis can be used to group expressions
- show ( 1 + 2 ) * 3
procedure input ...- Call procedure with default number of inputs
- show "hello
( procedure input ... )- Call procedure with an arbitrary number of inputs
- (show "hello :name)
2. Data Structure Primitives
2.1 Constructors
word expr expr(word expr ...)- Concatenate two (or more) words into one word
- show (word "a "b "c)
list thing1 thing2(list thing1 thing2 ...)- Create a new list from the inputs
- show (list 1+2 2+3 3+4)
sentence thing1 thing2(sentence thing1 thing2 ...)se thing1 thing2(se thing1 thing2 ...)- Create a new list from the inputs (if non-lists) or members of the inputs (if lists)
- show sentence [1 2 3] [and so on]
fput thing listlput thing list- Outputs list, but with thing added as a new first/last item; if list is a word, concatenates
- show fput 0 [ 1 2 3 ]
- show fput "a "bcd
- show lput 4 [ 1 2 3 ]
- show lput "e "bcd
array size(array size origin)- Create a new array. The default origin is 1.
- show array 10
mdarray [dimensions ...](mdarray [dimensions ...] origin)- Create a new multi-dimensional array. The default origin is 1.
- show mdarray [2 2]
listtoarray list(listtoarray list origin)- Create a new array populated by members of a list
- show listtoarray [ 1 3 5 7 ]
arraytolist array- Create a new list populated by members of a array
- show arraytolist { 2 4 6 8 }
combine thing1 thing2- If thing2 is a word, like
word; otherwise, likefput - show combine "a [b c]
reverse list- Outputs a list with the items in reverse order; if input is a word, reverses characters
- show reverse [ 1 2 3 ]
- show reverse "abc
gensym- Outputs a unique string, e.g. G1, G2, etc.
- show gensym
2.2 Data Selectors
first listlast list- Outputs the first or last item (or character) from the list (or word), respectively
- show first [ 1 2 3 ]
- show first "abc
- show last [ 1 2 3 ]
- show last "abc
firsts listoflists- Outputs a list of the first item (or character) of each sublist (or word)
- show firsts [ [1 2 3] [a b c] ]
- show firsts [ abc def ]
butfirst listbf listbutlast listbl list- Outputs the list (or word), except for the first/last item (or character)
- show butfirst [ 1 2 3 ]
- show butfirst "abc
- show butlast [ 1 2 3 ]
- show butlast "abc
butfirsts listoflistsbfs listoflists- Outputs a list of sublists (or words) without the first item (or characters)
- show butfirsts [ [ 1 2 3 ] [ a b c ] ]
- show butfirsts [ abc def ]
item index thing- Outputs the indexth item of the list or array or word
- show item 2 [ 1 2 3 ]
- show item 2 "abc
mditem [index ...] thing- Outputs an item from a multi-dimensional array
- show mditem [2 1] {{a b} {c d}}
pick list- Outputs one item from a list (or word), at random
- show pick [ 1 2 3 ]
- show pick "abc
remove thing list- Outputs the list (or word) with any occurences of thing removed
- show remove "b [ a b c ]
- show remove "a "banana
remdup list- Outputs the list (or word) with duplicates removed
- show remdup [ 1 2 3 2 3 4 3 4 5 ]
- show remdup "banana
quoted thing- Outputs thing with " prepended if a word, or just thing otherwise.
- show quoted "abc
split thing list- Outputs the list split into a list of lists (or list of words) wherever thing appears.
- show split "a "banana
- show split 3 [1 2 3 4 1 2 3 4]
2.3 Data Mutators
setitem index array value- Sets the indexth item of the array to value (circular arrays prevented)
- make "a { 1 2 3 } setitem 2 :a "x show :a
mdsetitem [index...] array value- Sets an item in a multi-dimensional array to value (circular arrays prevented)
- make "a {{1 2} {3 4}} mdsetitem [2 1] :a "x show :a
.setfirst list value- Sets the first item of the list to value
- make "a [ 1 2 3 ] .setfirst :a "7 show :a
.setbf list value- Sets the 'butfirst' of the list to the items in value (a list)
- make "a [ 1 2 3 ] .setbf :a [ 4 9 ] show :a
.setitem index array value- Sets the indexth item of the array to value (circular arrays allowed)
- make "a { 1 2 3 } setitem 2 :a "x show :a
push stackname thingpop stackname- Push to/pop from a stack i.e. list variable. Stacks grow from the front. Works on words.
- make "s [ 2 1 ] push "s 3 show :s show pop "s
- make "s "ba push "s "c show :s show pop "s
queue stackname thingdequeue stackname- Add/remove from a queue i.e. list variable, Queues grow from the end. Works on words.
- make "q [ 1 2 ] queue "q 3 show :q show dequeue "q
- make "q "ab queue "q "c show :q show dequeue "q
2.4 Predicates
Predicates return 1 (true) or 0 (false)
wordp thingword? thinglistp thinglist? thingarrayp thingarray? thingnumberp thingnumber? thing- Test if thing is a word, list, array, or number respectively.
emptyp exprempty? expr- Test if thing is an empty list or empty string.
equalp expr exprequal? expr exprexpr = exprnotequalp expr exprnotequal? expr exprexpr <> expr- Equality/inequality tests. Compares strings, numbers, or lists (equal if length and all members are equal).
beforep thing1 thing2before? thing1 thing2- Test string collation order.
.eq thing1 thing2- Test if things have the same identity.
memberp thing listmember? thing list- Test if thing is equal to any member of list.
substringp thing1 thing2substring? thing1 thing2- Test if thing1 is a substring of thing2.
2.5 Queries
count thing- Outputs length of a list or number of characters in a string
- show count [ 1 2 3 ]
- show count "hello
ascii expr- Outputs ASCII (actually, Unicode) code point for first character of string
- show ascii "abc
char expr- Outputs Unicode character at specified code point
- show char 97
member thing list- Outputs the list (or word) from the first occurence of thing to the end, or empty list (or word)
- show member "a "banana
- show member 2 [1 2 3 4]
uppercase exprlowercase expr- Outputs string converted to upper/lowercase
- show uppercase "abc
- show lowercase "ABC
standout expr- Outputs string with alphanumeric characters in bold
- show standout "ABCabc123
parse word- Outputs word parsed as a list.
- show parse "1+2
runparse word- Outputs word parsed as instructions.
- show runparse "1+2
3. Communication
3.1 Transmitters
print thingpr thing- (
print thing1 thing2 ...) - (
pr thing1 thing2 ...) - Print inputs to the text screen, separated by spaces, and followed by a newline. Square brackets are only put around sublists.
- print "hello
type thing- (
type thing1 thing2 ...) - Like
printbut with no trailing newline. - type "hel type "lo
show thing- (
show thing1 thing2 ...) - Like
printbut with square brackets around list inputs. - show "hello
3.2 Receivers
readlist(readlist promptstr)- Prompt the user for a line of input. The result is a list of words.
- show readlist
- make "colors (readlist [Type some colors:]) show :colors
readword(readword promptstr)- Prompt the user for a line of input. The result (including spaces) is the single word output.
- show readword
- make "name (readword [What is your name?]) show :name
3.4 Terminal Access
cleartextct- Clear the text screen.
settextcolor color- Change the text color.
textcolor- Output the current text color.
increasefontdecreasefont- Increase/decrease the text size.
settextsize height- Change the text size (in pixels).
textsize- Output the current text size (in pixels).
setfont name- Change the text font.
font- Output the current text font.
4. Arithmetic
4.1 Numeric Operations
Inputs are numbers or numeric expressions, output is a number.
sum expr expr(sum expr ...)expr + exprdifference expr exprexpr - exprproduct expr expr(product expr ...)expr * exprquotient expr expr(quotient expr)expr / exprpower expr exprexpr ^ expr- Add, subtract, multiply, divide, and raise-to-the-power-of respectively. A single input to quotient returns the reciprocal.
remainder expr exprexpr % exprmodulo expr expr- Outputs the remainder (modulus). For
remainderand%the result has the same sign as the first input; formodulothe result has the same sign as a the second input. minus expr- expr- Unary minus sign must begin a top-level expression, follow an infix operator, or have a leading space and no trailing space.
abs num- Absolute value
int numround num- Truncate or round a number, respectively.
sqrt exprexp exprlog10 exprln expr- Square root, e to the power of, common logarithm, and natural logarithm, respectively.
arctan expr(arctan x y)sin exprcos exprtan expr- The usual trig functions. Angles are in degrees.
radarctan expr(radarctan x y)radsin exprradcos exprradtan expr- The usual trig functions. Angles are in radians.
iseq first last- Outputs a list with integers from first to last, inclusive
- show iseq 1 10
rseq first last count- Outputs a list of count numbers from first to last, inclusive
- show rseq 1 9 5
4.2 Numeric Predicates
lessp expr exprless? expr exprexpr < exprgreaterp expr exprgreater? expr exprexpr > exprlessequalp expr exprlessequal? expr exprexpr <= exprgreaterequalp expr exprgreaterequal? expr exprexpr >= expr- Less than, greater than, less than or equal to, greater than or equal to, respectively. Inputs are numbers or numeric expressions, output is 1 (true) or 0 (false).
4.3 Random Numbers
random expr(random start end)- Outputs a random number from 0 through one less than expr, or from start to end inclusive.
- show random 10
- show (random 1 6)
rerandom- (
rerandom expr) - Reseeds the random number generator, either to a fixed value or the specified seed.
4.4 Print Formatting
form expr width precision- Outputs a formatted string with the result of a numeric expression with precision decimal places and padded on the left with spaces (if necessary) to be at least width characters long.
- show form 1/3 10 3
4.5 Bitwise Operations
bitand expr expr(bitand expr ...)bitor expr expr(bitor expr ...)bitxor expr expr(bitxor expr ...)bitnot expr- Bitwise and, or, exclusive-or, and not, respectively.
ashift expr bitcount- Arithmetic bit shift. If bitcount is negative, shifts to the right, preserving sign.
lshift expr bitcount- Logical bit shift. If bitcount is negative, shifts to the right, zero-filling.
5. Logical Operations
true- Outputs 1
false- Outputs 0
and expr expr(and expr ...)or expr expr(or expr ...)xor expr expr(xor expr ...)not expr- Logical "and", "or", "exclusive-or", and "not", respectively. Inputs are numbers or numeric expressions, output is 1 (true) or 0 (false).
6. Graphics
An introduction to Turtle Geometry.
6.1 Turtle Motion
forward exprfd expr- Move turtle forward expr pixels
- fd 100
back exprbk expr- Move turtle backward expr pixels
- bk 100
left exprlt expr- Rotate expr degrees counterclockwise
- lt 90
right exprrt expr- Rotate expr degrees clockwise
- rt 90
setpos [ expr expr ]setxy expr exprsetx exprsety expr- Move turtle to the specified location
- setpos [ 100 -100 ]
- setxy -100 100
setheading exprseth expr- Rotate the turtle to the specified heading
- setheading 45
home- Moves the turtle to center, pointing upwards
arc angle radius- Without moving the turtle, draws an arc centered on the turtle, starting at the turtle's heading.
- arc 180 100
6.2 Turtle Motion Queries
posxcorycor- Outputs the current turtle position as [ x y ], x or y respectively
- show pos
heading- Outputs the current turtle heading
- show heading
towards [ expr expr ]- Outputs the heading towards the specified [ x y ] coordinates
- show towards [ 0 0 ]
scrunch- Outputs the current graphics scaling factors
- show scrunch
bounds- Outputs the current graphics screen bounds [ xmin xmax ymin ymax ]
- show bounds
6.3 Turtle and Window Control
showturtlest- Show the turtle
hideturtleht- Hide the turtle
clean- Clear the drawing area
clearscreencs- Same as clean and home together
wrap- If the turtle moves off the edge of the screen it will continue on the other side. (default)
window- The turtle can move past the edges of the screen, unbounded.
fence- If the turtle attempts to move past the edge of the screen it will stop.
fill- Does a paint bucket flood fill at the turtle's position.
- arc 360 100 fill
filled fillcolor [ statements ... ]- Execute statements without drawing but keeping track of turtle movements. When complete, fill the region traced by the turtle with fillcolor and outline the region with the current pen style.
- filled "red [ repeat 5 [ fd 100 rt 144 ] ]
label expr- Draw a word (same logic as
print) on the graphics display at the turtle location - repeat 8 [ label "Logo rt 45 ]
setlabelheight expr- Set the height for text drawn by
label, in pixels - setlabelheight 100 label "Logo
setlabelfont expr- Set the font for text drawn by
label - setlabelfont "Times\ New\ Roman label "Logo
setscrunch sx sy- Set the graphics scaling factors
- setscrunch 1 2 arc 360 100
setturtle index- Switch to the turtle numbered index (starting from 1 for the default turtle present at start). If the turtle has not been used yet, it will be created at the center, facing upwards, visible, with the pen down.
- setturtle 2 rt 90 fd 100
ask turtleindex [ statements ... ]- Execute statements as turtle number turtleindex.
- ask 2 [ rt 90 fd 100 ]
clearturtles- Remove all turtles, keeping the current one as index 1.
- fd 50 setturtle 2 rt 90 fd 100 clearturtles
6.4 Turtle and Window Queries
shownpshown?- Outputs 1 if the turtle is shown, 0 if the turtle is hidden
turtlemode- Outputs
WRAP,WINDOWorFENCE labelsize- Outputs the height of text drawn by
label, in pixels labelfont- Outputs the name of the font drawn by
label turtle- Outputs the index of the currently-active turtle
turtles- Outputs the largest index that has been passed to
setturtle
6.5 Pen and Background Control
pendownpd- Turtle resumes leaving a trail
penuppu- Turtle stops leaving a trail
penpaintpptpenerasepepenreversepx- Change the turtle drawing mode - paint (the default) leaves a colored trail, erase restores the background, reverse inverts the background.
- setpw 10 px repeat 5 [ fd 100 rt 144 ]
setpencolor logocolorsetpencolor csscolorsetpencolor [r g b]- Set pen/text color. Color can be a standard Logo color number (0-15), CSS color string (CSS color names or #rrggbb), or in the list version, r/g/b values in 0...99.
- The standard Logo colors are:
0
black1
blue2
green3
cyan4
red5
magenta6
yellow7
white8
brown9
tan10
green11
aqua12
salmon13
purple14
orange15
gray - setpencolor 4
- setpencolor "red
- setpencolor "#ff0000
- setpencolor [ 99 0 0 ]
setpalette colornumber csscolorsetpalette colornumber [r g b]- Change one of the standard color entries (8 or above) to the given color.
- setpalette 8 "pink setbg 8
- setpalette 8 "#ff4f00 setbg 8
- setpalette 8 [ 99 31 0 ] setbg 8
setpensize expr- Set pen width in pixels. If expr is a list, the first member is used.
setbackground colorsetscreencolor colorsetsc color- Set the background color; same options as
setpencolor - setbackground "red
6.6 Pen Queries
pendownppendown?- Outputs 1 if the pen is down, 0 otherwise
- show pendown?
penmode- Outputs
PAINT,ERASEorREVERSE - show penmode
pencolorpc- Outputs the current pen color. This will be a CSS color string, not necessarily the value passed in.
- show pencolor
palette colornumber- Outputs the a palette entry. This will be a CSS color string, not necessarily the value passed in.
- show palette 8
pensize- Outputs a two element list with the pen width and height (usually the same).
- show pensize
backgroundbggetscreencolorgetsc- Outputs the background color. This will be a CSS color string, not necessarily the value passed in.
- show background
6.7 Bitmap Operations
bitcut width height- Copy a bitmap, from the turtle's position width by height pixels.
bitpaste- Paste the previously copied bitmap at the current turtle position.
- repeat 4 [ rt 90 fd 40 ] bitcut 50 50 pu fd 100 bitpaste
6.8 Mouse/Touch Queries
mousepos- Outputs a list of the x, y coordinates of the last mouse position
- forever [setpos mousepos]
clickpos- Outputs a list of the x, y coordinates of the last mouse press
- forever [setpos clickpos]
buttonpbutton?- Outputs 1 if any mouse button is down, 0 otherwise.
- forever [ifelse button? [pd] [pu] setpos mousepos]
button- Outputs a number indicating the pressed mouse buttons (
1= left, 2 = right, etc) or 0 for none. touches- Outputs a list of current touch coordinates
- forever [ifelse count touches [setpos first touches pendown] [penup]]
7. Workspace Management
7.1 Procedure Definition
to procname inputs ... statements ... end- Define a new named procedure. Inputs can be:
- Required:
:a :b - Optional (with default values):
[:c 5] [:d 7] - Rest (remaining inputs as a list):
[:r] - Default number of inputs:
3
- Required:
- to star :n repeat 5 [ fd :n rt 144 ] end
define procname [[inputs ...][statements ...]]- Define a new named procedure with optional inputs
- define "star [[n][repeat 5 [fd :n rt 144]]]
def procname- Outputs the definition of a named procedure as a string
- show def "star
text procname- Outputs the definition of a named procedure as a list, suitable for use with
DEFINE - show text "star
copydef newname oldname- Copy a procedure. If a procedure newname already existed it will be overridden. Primitive procedures can't be overridden unless
REDEFPisTRUE. - copydef "new "old
7.2 Variable Definition
make varname expr- Update a variable or define a new global variable. The variable name must be quoted
- make "myvar 5
name expr varname- Like
makebut with the inputs reversed - name 5 "myvar
local varname(local varname ...)- A subsequent
makewill create the variable(s) in the local scope instead of the global scope - local "myvar
localmake varname expr- Define a variable in the local scope (shortcut for
localthenmake - localmake "myvar 5
thing varname- Outputs the value of variable.
:foois a shortcut forthing "foo - show thing "myvar
global varname- Reserve the variable at the global scope. This doesn't do anything useful.
- global "myvar
7.3 Property Lists
pprop plistname propname value- Set the property propname in the property list plistname to value value.
gprop plistname propname- Get the value of the property propname in the property list plistname, or the empty list if no such property.
remprop plistname propname- Remove the property propname in the property list plistname.
plist plistname- Return a list of properties in the property list plistname, alternating property name, property value.
7.4 Workspace Predicates
Predicates return 1 (true) or 0 (false)
procedurep nameprocedure? name- Test if there is a procedure with the given name.
primitivep nameprimitive? name- Test if there is a built-in procedure with the given name.
definedp namedefined? name- Test if there is a user-defined procedure with the given name.
namep namename? name- Test if there is a variable with the given name.
plistp nameplist? name- Test if there is a property list with the given name.
7.5 Workspace Queries
contents- Outputs a list with three members. The first is a list of user-defined procedure names. The second is a list of defined variables. The third is a list of non-empty property list names. Only non-buried procedures, variables, and property lists are included.
buried- Outputs a list with three members. The first is a list of user-defined procedure names The second is a list of defined variables. The third is a list of non-empty property list names. Only buried procedures, variables, and property lists are included.
procedures- Outputs a list of user-defined non-buried procedure names.
primitives- Outputs a list of primitive non-buried procedure names.
globals- Outputs a list of defined non-buried global variables.
names- Outputs a list with two members. The first is an empty list. The second is a list of defined non-buried variables.
plists- Outputs a list with three members. The first is an empty list. The second is an empty list. The third is a list of non-empty non-buried property list names.
namelist namenamelist namelist- Return a
contents-style list with the given variable names. pllist plnamepllist plnamelist- Return a
contents-style list with the given property lists. arity procname- Return a list with the procedure's minimum, default, and maximum number of inputs; maximum is -1 if unlimited.
7.7 Workspace Control
erase contentslist- Takes a three member list, where the first is a list of user-defined procedure names to erase, the second is a list of defined variables to erase, the third is a list of property lists to erase. Primitive procedures can't be erased unless
REDEFPisTRUE. - erase [ [myproc] [myvar] [] ]
erall- Erase all non-buried user-defined procedures, variables and property lists.
erps- Erase all non-buried user-defined procedures.
erns- Erase all non-buried variables.
erpls- Erase all non-buried property lists.
ern varnameern varnamelist- Erase the named variable(s).
epl plnameepl plnamelist- Erase the named property list(s).
bury contentslist- Takes a three member list, where the first is a list of user-defined procedure names to bury, the second is a list of defined variables to bury, the third is a list of property lists to bury.
buryall- Bury all user-defined procedures, variables, and property lists.
buryname varnameburyname varnamelist- Bury the given variable (or list of variables).
unbury contentslist- Takes a three member list, where the first is a list of user-defined procedure names to unbury, the second is a list of defined variables to unbury, the third is a list of property lists to unbury.
unburyall- Unbury all user-defined procedures, variables, and property lists.
unburyname varnameunburyname varnamelist- Unbury the given variable (or list of variables).
buriedp contentslistburied? contentslist- Return 1 if the first named user-defined procedure, variable, or property list exists and is buried, 0 otherwise.
8. Control Structures
8.1 Control
run [ statements ... ]- Run the specified statements once
- run [ fd 100 rt 90 ]
runresult [ statements ... ]- Run the specified statements once. If the statements return a value, the result is a list with the value as a single member. Otherwise, the result is an empty list.
repeat expr [ statements ... ]- Repeat statements expr times
- repeat 4 [ fd 100 rt 90 ]
forever [ statements ... ]- Repeat statements forever. Used inside a user-defined procedure that terminates with
output,stoporbye - forever [ make "n random 100 show :n if :n == 0 [ bye ] ]
repcount#- Outputs the current iteration number of the current
repeatorforever - repeat 10 [ show repcount ]
- repeat 10 [ show # ]
if expr [ statements ... ]if [expr] [ statements ... ]- Execute statements if the expression is non-zero
- if 2 > 1 [ show "yep ]
ifelse expr [ statements ... ] [ statements ... ]ifelse [expr] [ statements ... ] [ statements ... ]- Execute first set of statements if the expression is non-zero, otherwise execute the second set
- ifelse 1 > 2 [ show "yep ] [ show "nope ]
test exprtest [expr]- Test the specified expression, save the result in the local scope for subsequent use by
iftrueoriffalse iftrue [ statements ...]ift [ statements ...]iffalse [ statements ...]iff [ statements ...]- Run the statements if the result of the last local
testwas non-zero (true) or zero (false) respectively. - test 1 > 2 iftrue [ show "yep ] iffalse [ show "nope ]
stop- End the running procedure with no output value.
output exprop expr- End the running procedure and output the specified value.
catch tag instructionlist- Run instructions, but if an error with matching tag is thrown, return the thrown value (if any). Use
"ERRORto catch errors from regular procedures. - catch "t [ show "before throw "t show "after ]
- catch "error [ show 1 / 0 ] show error
throw tag(throw tag value)- Throw an error with the given tag which may be caught. An optional return value can be passed.
- show catch "t [ show "hello (throw "t "world) ]
error- Outputs a list describing the last error caught: an error number, an error message message, and the procedure name where the error occurred.
- catch "error [ show 1 / 0 ] show error
wait time- Pauses execution. time is in 60ths of a second.
bye- Terminate the program
.maybeoutput expr- Like
outputif expr returns a value, likestopotherwise ignore expr- Evaluate and ignore results of the expression
- make "q [ 1 2 3 ] ignore dequeue "q
` list- Outputs the list with substitutions:
, instructionlistreplaced by output,@ instructionlistreplaced by output list members",instructionreplaced by output prefixed with ",@instructionreplaced by output prefixed with :
- show `[a b ,[bf [c d e]] f ,@[bf [g h i]]]
- make "v "x show `[",:v :,:v]
for controllist [ statements ...]- Typical
forloop. The controllist specifies three or four members: the local varname, start value, limit value, and optional step size. - for [ a 1 10 ] [ show :a ]
- for [ a 0 20 2 ] [ show :a ]
dotimes [varname times] [ statements ...- Run the statements the specified number of times. The variable varname is set to the current iteration number.
- dotimes [ i 5 ] [ show :i * :i ]
do.while [ statements ...] exprdo.while [ statements ...] [expr]- Runs the specified statements at least once, and repeats while the expression is non-zero (true).
- do.while [ make "a random 10 show :a ] :a < 8
while expr [ statements ...]while [expr] [ statements ...]- Runs the specified statements only while the expression remains non-zero (true).
- while (random 2) = 0 [ show "zero ] show "one
do.until [ statements ...] exprdo.until [ statements ...] [expr]- Runs the specified statements at least once, and repeats while the expression is zero (false).
- do.until [ make "a random 10 show :a ] :a < 8
until expr [ statements ...]until [expr] [ statements ...]- Runs the specified statements only while the expression remains zero (false).
- until (random 2) = 0 [ show "one ] show "zero
case value [ clauses ... ]- For each clause in order: If the clause is of the form
[ ELSE expr ]then expr is evaluated and returned. Otherwise, if the clause is of the form[ [ matches ] expr ]and value is a member of matches then expr is evaluated and returned. - show case :var [ [ ["a] "AAA ] [ ["b] "BBB ] [ else "other ] ]
cond [ clauses ... ]- For each clause in order: If the clause is of the form
[ ELSE expr ]then expr is evaluated and returned. Otherwise, if the clause is of the form[ [ expr1 ] expr2 ]and expr1 evaluates to non-zero (true) then expr2 is evaluated and returned. - show cond [ [ [:var = 1] "one] [ [:var = 2] "two] [ else "other ] ]
8.2 Template-based Iteration
These higher-level procedures support only the named procedure form of template. The first input is the name of a procedure to call.
apply procname list- Call procname with the members of list as inputs
invoke procname input1(invoke procname input1 ...)- Call procname with the specified inputs as inputs
- invoke "show "hello
foreach list procname- call procname for each item in the list
- foreach [1 2 3] "show
map procname list- Outputs a list composed of the results of calling procname for each item in the list
- to double :n output :n * 2 end show map "double [1 2 3]
filter procname list- Outputs a list composed of the input list where procname called on the item returns non-zero (true)
- to oddp :n output bitand :n 1 end show filter "oddp [ 1 2 3 4 5 ]
find procname list- Outputs the first item in list for which calling procname on it returns non-zero (true). If not found, the empty list is returned.
- to oddp :n output bitand :n 1 end show find "oddp [ 2 8 4 7 10 9 ]
reduce procname list(reduce procname list initial)- Call procname repeatedly with two inputs - the current value and the next list item. If initial is not specified, the first list element is used instead.
- show reduce "sum [ 1 2 3 4 5 ]
crossmap procname listlist(crossmap procname list list ...)- Call procname repeatedly with inputs from the lists, in all possible combinations.
- show crossmap "word [[a b] [x y]]
- show (crossmap "word [a b c] [1 2 3 4])
No comments to display
No comments to display