# Functional programming in Clojure

## Clojure MOOC has ended

This meens that you can't get study credits for the Clojure course given by the CS department of University of Helsinki.

## Basic tools

Get equipped in your fight against the dragons.

• Installing the developement environment
• Java
• Leiningen
• Editor
• Git
• How to submit answers to exercises

## Training day

Get your survival skills up to shape.

• Structure of the exercise project
• Using the REPL
• Prefix syntax
• Defining functions

## I am a horse in the land of booleans

• `if` and truthiness
• Everything is an expression and thus has a value

## Structured data

Learn the structural weaknesses of dragons.

• Local names
• Data structures
• Vectors
• Maps
• Sets
• Abstract sequences
• Mapping
• Filtering

• Indentation
• Whitespace
• Idioms

## P-P-P-Pokerface

Project: poker hand evaluator

## Predicates

• Functions as values
• Predicate functions
• Higher-order functions
• `some`
• `every?`

## Recursion

Down the rabbit hole.

• Recursion over sequences
• Recursion over numbers
• Nonlinear recursion
• Tree recursion
• Passing state

## Looping is recursion

Calling tails.

• Iteration with tail recursion
• `loop`
• `recur`

## One Function to rule them all

One Function to rule them all, One Function to find them,
One Function to bring them all and in the darkness bind them
In the Land of Code where the Off-By-Ones lie.

• Accumulating recursion with `reduce`
• Variable arguments

## blorg blorg blorg

A blog engine written in Clojure, studied.

## Sudoku

Project: sudoku solver