###
Exact integers and fractions

Kawa has the usual syntax for decimal integers.
Addition, subtraction, and mutliplication
are written using the usual `+`

,
`-`

, and `*`

,
but these are all prefix functions that take a variable number of arguments:

(+ 1 2 3) ⇒ 6
(- 10 3 4) ⇒ (- (- 10 3) 4) ⇒ 3
(* 2 -6) ⇒ -12

Kawa has arbitrary-precision integers.

Let us implement the factorial function.
Type in the following (we’ll look at the syntax shortly):

#|kawa:1|# `(define (factorial x)`

#|(---:2|# ` (if (< x 1) 1`

#|(---:3|# ` (* x (factorial (- x 1)))))`

(The prompt changes to indicate a continuation line.)
This binds the name `factorial`

to new function, with formal parameter `x`

.
This new function is immediately compiled to Java bytecodes,
and later a JIT compiler may compile it to native code.

A few tests:

#|kawa:4|# `(list (factorial 3) (factorial 4))`

(6 24)
#|kawa:5|# `(factorial 30)`

265252859812191058636308480000000

###
Floating-point real numbers

###
Complex numbers

###
Units and dimensions