Learn Clojure with interactive lessons and drills.

drill: printing question 1 / 5
par 2 0 strokes drilling printing

Make one word and show it: homepage — by gluing home and page together.

Functions you might need:

??
Reveal one (2) Show solution

Write the code in the editor on the right, then Run it.

</> editor clj
;; write your solution, then Run ▸
Run ▸ ⌘/Ctrl + Enter
Expected output
homepage
Learn println
The full learning map: a branching tree of topics from Printing at the top, down through Collections, Sequences, Functions and on to recursion and the applied puzzles

Foundations

18 lessons · 36 exercises
  • Printing println, print, str, pr-str 4 lessons · 9 exercises
  • Values & bindings def, let, and arithmetic 7 lessons · 13 exercises
  • Data types booleans, nil, keywords, numbers 7 lessons · 14 exercises

Collections & sequences

24 lessons · 46 exercises
  • Collections lists, vectors, maps, sets 10 lessons · 20 exercises
  • Sequences map, filter, reduce, range, for 8 lessons · 15 exercises
  • Strings split, join, replace 6 lessons · 11 exercises

Functions, flow & state

18 lessons · 34 exercises
  • Functions defn, fn, and #() 7 lessons · 13 exercises
  • Control flow if, when, cond, case 7 lessons · 13 exercises
  • State (atoms) atom, deref, swap!, reset! 4 lessons · 8 exercises

Going deeper

45 lessons · 86 exercises
  • Destructuring [a b] and {:keys [..]} 5 lessons · 10 exercises
  • Threading -> ->> as-> 5 lessons · 10 exercises
  • Recursion loop/recur, base case + step 5 lessons · 10 exercises
  • Sequence deep dive flatten, partition, group-by 10 lessons · 15 exercises
  • Set operations union, intersection, difference 6 lessons · 12 exercises
  • Regular expressions re-seq, re-find, #"..." 5 lessons · 10 exercises
  • EDN read-string, pr-str round-trip 5 lessons · 10 exercises
  • Errors try/catch, throw, ex-info 4 lessons · 9 exercises

Applied puzzles

25 lessons · 50 exercises
  • Number puzzles FizzBuzz, Fibonacci, primes, GCD 7 lessons · 16 exercises
  • Text puzzles palindrome, anagram, camelCase 7 lessons · 14 exercises
  • Sorting sort, sort-by, comparators, top-n 6 lessons · 10 exercises
  • Searching some, frequencies, find, index-of 5 lessons · 10 exercises
the editor

Write Clojure, and Run it

The editor runs on Scittle in your browser, and on your local environment — real Clojure on your machine — in the open-source desktop app. You can type anything you like and Run it. The exercise is waiting on a particular output; whatever you Run is just printed, and the moment it matches you advance.

Each drill has a par: the number of expressions — pairs of parentheses — in the provided solution. Solve it in fewer expressions and you're under par; use more and you're over. You can reveal a hint if you're stuck, or reveal the whole solution if you're really stuck.

Exercises are tracked by an automatic BKT estimate of your fluency and an SRS built on the forgetting curve. Using hints or revealing the solution lowers the app's estimate for that concept, so the drill comes back around in your rotation more often. Repeat any drill as many times as you like to get a better par and raise your BKT.

A Practice exercise: the task and hint chips on the left, a dark Clojure editor with Run and the expected output on the right
learn

Start with a lesson

The lessons give you a brief overview of the syntax and concept, then invite you to play around with the code in the editor.

A lesson: a short explanation above a live, pre-filled code editor you can Run
practice

Makes perfect

In the practice drill you're prompted to write the code the lesson just covered. The prompt aims not to give the answer away, and you can see what the editor expects.

You could of course game it with a print statement — but the point is to build real fluency in Clojure. Successfully completing the drill is the only thing that raises your BKT score; the app tracks solutions revealed and hints used and takes those as evidence you don't know the code yet.

The par and star system is just there to encourage efficient, idiomatic Clojure — and to get you playing around with different solutions. You stay free to answer the problem any way you like.

A passed exercise: five gold stars, on par, the intended solution, and a note
how it remembers

Knowledge tracing + spaced repetition

As you practise, the app keeps a running estimate of how well you know each part of a solution — that's Bayesian Knowledge Tracing, the mastery number you saw jump on the result card. Because it's per-token and Bayesian, one lucky guess doesn't read as "known", and getting map right in one topic carries over to the next.

Left alone, that mastery decays along the forgetting curve — memory fades fastest right after you learn something. The selector schedules each item to come back just as it's about to slip, and every time you get it right the next gap gets longer.

mastery time → due for review minutes hours days weeks+
Each correct review (●) resets mastery higher and stretches the gap before the next one.
the toolbox

Build your fluency in Clojure, one tool at a time

Every topic you've worked on rolls up here: your streak, topics mastered, lessons done and exercises solved, plus everything that's due for review. As you practise, each topic earns its own card with a mastery heatmap and your par against your best.

The toolbox: streak and totals on top, per-topic cards with mastery bars and par-vs-best

The web app

Runs in the browser on Scittle — a small Clojure interpreter compiled to JavaScript.

  • No account needed to start; everything works straight away.
  • Sign in if you want your progress synced across devices.
  • Or skip the account entirely and keep your progress as a JSON file you export and import yourself.

The desktop build

The open-source build runs entirely on your own machine, evaluating your code locally.

  • No account, no telemetry, no backend — it works offline.
  • Your progress is a JSON file on your own disk; export and import is the only backup.
  • Local-only, and free software under the EPL.

Built on the Clojure ecosystem

Clojure Fandango was made possible by the following open-source projects.