Scamper Language Reference (2.6.6)
Statements
; Import statements
(import "<identifier>")
(import "image")
; Binding statements
(define <identifier> <expression>)
(define x (+ 1 1))
; Expression statements
<expression>
(+ 1 1)
; Display statement
(display <expression>)
(display "Hello!")
; Struct declaration statements
(struct <identifier> (<identifier1> ... <identifierK>))
(struct person (name age height))
Expressions
; Variables
<identifier>
x
; Literals
42 ; integers
-0.3 ; floating-point number
#t ; boolean true
#f ; boolean false
"Hello" ; string
#\a ; character
; Lambda Expressions
(lambda (<identifier1> ... <identifierK>) <expression>)
(lambda (x y z)
(- (* x y) (/ y z)))
; Function application/call
(<expression1> ... <expressionK>)
(+ 1 1)
; Boolean conjunction/disjunction
(and <expression1> ... <expressionK>)
(or <expression1> ... <expressionK>)
(and (= 1 1) (= 2 2))
; Conditional expressions
(if <expression1> <expression2> <expression3>)
(if (= x 10)
"is 10"
"is not 10")
; "Cond" expressions
(cond
[<expression11> <expression12>]
...
[<expressionK1> <expressionK2>])
(cond [(= x 10) "is 10"]
[(= x 20) "is 20"]
[else "is not 10 or 20"]) ; Note: 'else' is #t
; Let-bindings
(let
[<identifier1> <expression1>]
...
[<identifierK> <expressionK>]
<expression>)
(let [x 10]
[y 20]
(+ x y))
; Match expression
(match <expression>
[<pattern1> <expression1>]
...
[<patternK> <expressionK>])
(match lst
[null #t]
[(cons _ _) #f])
; Section expression
(section <expression1> ... <expressionK>)
(section string-append "Hello " _ "!")