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
- Data Structure Primitives
- Communication
- Arithmetic
- Logical Operations
- Graphics
- Workspace Management
- Control Structures
Types
"word
- Text string (terminated by whitespace)
:variable
- Input definition/variable reference
[ word ... ]
- List of words or lists, whitespace separated
{ word ... }
{ word ... }@origin
- Array of words whitespace separated
( expression )
- Parenthesis can be used to group expressions
procedure input ...
- Call procedure with default number of inputs
( procedure input ... )
- Call procedure with an arbitrary number of inputs
2. Data Structure Primitives
2.1 Constructors
word expr expr
(word expr ...)
- Concatenate two (or more) words into one word
list thing1 thing2
(list thing1 thing2 ...)
- Create a new list from the inputs
array size
(array size origin)
- Create a new array. The default origin is 1.
listtoarray list
(listtoarray list origin)
- Create a new array populated by members of a list
arraytolist array
- Create a new list populated by members of a array
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)
fput thing list
lput thing list
- Outputs list, but with thing added as a new first/last item
combine thing1 thing2
- If thing2 is a word, like
word
; otherwise, like fput
reverse list
- Outputs a list with the items in reverse order
gensym
- Outputs a unique string, e.g. G1, G2, etc.
2.2 Data Selectors
first list
last list
- Outputs the first or last item from the list, respectively
butfirst list
bf list
butlast list
bl list
- Outputs the list, except for the first/last item
firsts listoflists
- Outputs a list of the first item of each sublist
butfirsts listoflists
bfs listoflists
- Outputs a list of sublists without the first item
pick list
- Outputs one item from a list, at random
item index thing
- Outputs the indexth item of the list or array
setitem index array value
- Sets the indexth item of the array to value
remove thing list
- Outputs the list with any occurences of thing removed
remdup list
- Outputs the list with duplicates removed
2.3 Data Mutators
push stackname thing
pop stackname
- Push to/pop from a stack i.e. list variable, e.g.
make "s []
then push "s 1
. Stacks grow from the front.
queue stackname thing
dequeue stackname
- Add/remove from a queue i.e. list variable, e.g.
make "q []
then queue "q 1
. Queues grow from the end
2.4 Predicates
Predicates return 1 (true) or 0 (false)
wordp thing
word? thing
listp thing
list? thing
arrayp thing
array? thing
numberp thing
number? thing
- Test if thing is a word, list, array, or number respectively.
equalp expr expr
equal? expr expr
expr = expr
notequalp expr expr
notequal? expr expr
expr <> expr
- Equality/inequality tests. Compares strings, numbers, or lists (equal if length and all members are equal).
emptyp expr
empty? expr
- Test if thing is an empty list or empty string.
beforep thing1 thing2
before? thing1 thing2
- Test string collation order.
memberp thing list
member? thing list
- Test if thing is equal to any member of list.
substringp thing1 thing2
substring? 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
ascii expr
- Outputs ASCII (actually, Unicode) code point for first character of string
char expr
- Outputs Unicode character at specified code point
uppercase expr
lowercase expr
- Outputs string converted to upper/lowercase
3. Communication
3.1 Transmitters
print thing
pr 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.
type thing
- (
type thing1 thing2 ...)
- Like
print
but with no trailing newline.
show thing
- (
show thing1 thing2 ...)
- Like
print
but with square brackets around list inputs.
3.2 Receivers
readword
(readword promptstr)
- Prompt the user for a line of input. The result (including spaces) is the single word output.
3.4 Terminal Access
cleartext
ct
- Clear the text screen.
4. Arithmetic
4.1 Numeric Operations
Inputs are numbers or numeric expressions, output is a number.
sum expr expr
(sum expr ...)
expr + expr
difference expr expr
expr - expr
product expr expr
(product expr ...)
expr * expr
quotient expr expr
(quotient expr)
expr / expr
power expr expr
expr ^ expr
-
Add, subtract, multiply, divide, and raise-to-the-power-of respectively.
A single input to quotient returns the reciprocal.
remainder expr expr
expr % expr
modulo expr expr
-
Outputs the remainder (modulus). For
remainder
and %
the result has the same sign as the first input; for modulo
the
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 num
round num
- Truncate or round a number, respectively.
sqrt expr
exp expr
log10 expr
ln expr
- Square root, e to the power of, common logarithm, and natural logarithm, respectively.
arctan expr
(arctan x y)
sin expr
cos expr
tan expr
- The usual trig functions. Angles are in degrees.
radarctan expr
(radarctan x y)
radsin expr
radcos expr
radtan expr
- The usual trig functions. Angles are in radians.
iseq first last
- Outputs a list with integers from first to last, inclusive
rseq first last count
- Outputs a list of count numbers from first to last, inclusive
4.2 Numeric Predicates
greaterp expr expr
greater? expr expr
expr > expr
greaterequalp expr expr
greaterequal? expr expr
expr >= expr
lessp expr expr
less? expr expr
expr <= expr
lessequalp expr expr
lessequal? expr expr
expr <= expr
- Greater than, greater than or equal to, less than, less than or equal to,
respectively. Inputs are numbers or numeric expressions, output is 1 (true) or 0 (false).
4.3 Random Numbers
random expr
- Outputs a random number from 0 through one less than expr
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
- Returns 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.
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 expr
fd expr
- Move turtle forward expr pixels
back expr
bk expr
- Move turtle backward expr pixels
left expr
lt expr
- Rotate expr degrees counterclockwise
right expr
rt expr
- Rotate expr degrees clockwise
setpos [ expr expr ]
setxy expr expr
setx expr
sety expr
- Move turtle to the specified location without drawing
setheading expr
seth expr
- Rotate the turtle to the specified heading
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.
6.2 Turtle Motion Queries
pos
xcor
ycor
- Outputs the current turtle position as [ x y ], x or y respectively
heading
- Outputs the current turtle heading
towards [ expr expr ]
- Outputs the heading towards the specified [ x y ] coordinates
6.3 Turtle and Window Control
showturtle
st
- Show the turtle
hideturtle
ht
- Hide the turtle
clean
- Clear the drawing area
clearscreen
cs
- 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
- 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.
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.
label expr
- Draw a word (same logic as
print
) on the graphics display at the turtle location
setlabelheight expr
- Set the height for text drawn by
label
, in pixels
6.4 Turtle and Window Queries
shownp
shown?
- Outputs 1 if the turtle is shown, 0 if the turtle is hidden
turtlemode
- Outputs
WRAP
, WINDOW
or FENCE
labelsize
- Outputs the height of text drawn by
label
, in pixels
6.5 Pen and Background Control
pendown
pd
- Turtle resumes leaving a trail
penup
pu
- Turtle stops leaving a trail
penpaint
penerase
penreverse
- Change the turtle drawing mode - paint (the default) leaves a colored trail, erase
restores the background, reverse inverts the background.
setpencolor logocolor
setpencolor csscolor
(setpencolor expr expr expr)
-
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 3-input version, r/g/b values in 0...99.
The standard Logo colors are:
0: black
| 1: blue
| 2: green
| 3: cyan
|
4: red
| 5: magenta
| 6: yellow
| 7: white
|
8: brown
| 9: tan
| 10: green
| 11: aqua
|
12: salmon
| 13: purple
| 14: orange
| 15: gray
|
setpensize expr
- Set pen width in pixels. If expr is a list, the first member is used.
6.6 Pen Queries
pendownp
pendown?
- Outputs 1 if the pen is down, 0 otherwise
penmode
- Outputs
PAINT
, ERASE
or REVERSE
pencolor
- Outputs the current pen color. This will be a CSS color string, not necessarily the value passed in.
pensize
- Outputs a two element list with the pen width and height (usually the same).
7. Workspace Management
7.1 Procedure Definition
to procname inputs ... statements ... end
- Define a new named procedure with optional inputs
def procname
- Outputs the definition of a named procedure as a string
copydef newname oldname
- Copy a procedure. If a procedure newname already existed it will
be overridden. Primitive procedures can't be overridden unless
REDEFP
is TRUE
.
7.2 Variable Definition
make varname expr
- Update a variable or define a new global variable. The variable name must
be quoted, e.g.
make "foo 5
name expr varname
- Like
make
but with the inputs reversed
local varname
(local varname ...)
- A subsequent
make
will create the variable(s) in the local scope instead of the global scope
localmake varname expr
- Define a variable in the local scope (shortcut for
local
then make
thing varname
- Outputs the value of variable.
:foo
is a shortcut for thing "foo
global varname
- Reserve the variable at the global scope. This doesn't do anything useful.
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 name
procedure? name
- Test if there is a procedure with the given name.
primitivep name
primitive? name
- Test if there is a built-in procedure with the given name.
definedp name
defined? name
- Test if there is a user-defined procedure with the given name.
namep name
name? name
- Test if there is a variable with the given name.
plistp name
plist? 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 name
namelist namelist
- Return a
contents
-style list with the given variable names.
pllist plname
pllist plnamelist
- Return a
contents
-style list with the given property lists.
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
REDEFP
is TRUE
.
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 varname
ern varnamelist
- Erase the named variable(s).
epl plname
epl 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.
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.
buriedp contentslist
buried? 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
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
forever [ statements ... ]
- Repeat statements forever. Used inside a user-defined procedure
that terminates with
output
or stop
repcount
- Outputs the current iteration number of the current
repeat
or forever
if expr [ statements ... ]
- Execute statements if the expression is non-zero
ifelse expr [ statements ... ] [ statements ... ]
- Execute first set of statements if the expression is non-zero, otherwise execute the second set
test expr
- Test the specified expression, save the result in the local scope for subsequent use by
iftrue
or iffalse
iftrue [ statements ...]
ift [ statements ...]
iffalse [ statements ...]
iff [ statements ...]
- Run the statements if the result of the last local
test
was non-zero (true) or zero (false) respectively.
stop
- End the running procedure with no output value
output expr
op expr
- End the running procedure and output the specified value
bye
- Terminate the program
.maybeoutput expr
- Like
output
if expr returns a value, like stop
otherwise
ignore expr
- Evaluate and ignore results of the expression
for controllist [ statements ...]
- Typical
for
loop. The controllist specifies three or four members:
the local varname, start value, limit value,
and optional step size.
do.while [ statements ...] expr
- Runs the specified statements at least once, and repeats while the expression is non-zero (true).
while expr [ statements ...]
- Runs the specified statements only while the expression remains non-zero (true).
do.until [ statements ...] expr
- Runs the specified statements at least once, and repeats while the expression is zero (false).
until expr [ statements ...]
- Runs the specified statements only while the expression remains zero (false).
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.
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.
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
foreach procname list
- call procname for each item in the list
map procname list
- Outputs a list composed of the results of calling procname for each item in the list
filter procname list
- Outputs a list composed of the input list where procname called on the item returns non-zero (true)
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.
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.