Functional LRU cache via association-list ordered most-recent-first.
Get / put both:
- find or remove the existing entry
- cons the fresh (k, v) to the front
- on put, trim the tail when over capacity
Sequence:
put 1 100; put 2 200; put 3 300
a = get 1 -> 100 (moves 1 to front)
put 4 400 (evicts 2)
b = get 2 -> -1 (no longer cached)
c = get 3 -> 300
d = get 1 -> 100
a + b + c + d = 499
Tests `match … with (k', v) :: rest when k' = k -> …` tuple-cons
patterns with `when` guards, `function` keyword for arg-less
match, recursive find/remove/take over the same list.
Parser limit found: `match n, lst with` ad-hoc tuple-scrutinee is
not yet supported (got "expected op -> got op ,"); workaround
uses outer `if` plus inner match.
171 baseline programs total.