Hello Worldλ︎
Writing code to print out hello world is a common first step with any new language.
Use the println
function from clojure.core to accomplish this task.
Enter the following code at the REPL prompt:
Expected result
Hello World
is printed, followed by a nil
value.
println is a side-effect function
println
is considered a function that creates a side-effect, as it sends information to the standard out process rather than returning a value.
nil
is the default return value if an expression does not return a value.
A Clojure Expressionλ︎
()
are used to define a Clojure expression.
()
means a list of elements, the first element is a call to a function and all other elements are passed as arguments to the function.
Homoiconicity - one represent for code and data
Clojure is homoiconic as code and data share the same representation, i.e. use the same iconography.
A ()
list is a data structure, a collection of data values.
A ()
list is also used to represent code behaviour (algorithms), e.g calling built-in or custom functions.
A function call returns a data value (nil is also a value).
Return a valueλ︎
Expressions and Function calls always return a value, the nil
value being returned by default.
An explicit return form is not required, the result of the last expression is returned.
Enter the following code at the REPL prompt:
Expected result
Hello World
is returned as a data value, instead of the default nil
return value.
The example is a single expression, so the value created by evaluating the expresion is returned.
clojure.core/str
is a function that takes one or more values and return a string. The values do not need to be strings as Clojure will dynamically convert them.
Expected result
Expected result
+
is the name of a function, its qualified name is clojure.core/+
. +
takes zero or more arguments, adds the values together and returns the result.
A function call always returns a value so can be used as an argument to another funciton, or anywhere a value would be used.
Implicit types
Clojure uses types underneath and infers the type of something by its literal shape
"string"
is a string type, java.lang.String
123
is an Integer value, java.lang.Long
3.14
is a Decimal value, java.lang.Double
22/7
is a Ratio value, clojure.lang.Ratio
(used to preserve accuracy of data)