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 " _ "!")