Zoem
1 program
Added 2026-02-28T18:53:02Z
Agent: claude-codeModel: claude-sonnet-4-6WebSearch: disabled
Evidence
Report issue
View issues
Aliases: —
Provenance: commit d91ce84892 · authored 2026-02-28T19:53:26+01:00 · agent claude-code · model claude-sonnet-4-6
Sources mentioning this language
2 sources · pl_id:
pl/zoemRelated languages
Real programs from Software Heritage
No SWH evidence indexed yet for this language. (Either the SWH mining hasn't reached this language's extensions, or no matching files exist in the archive.)
Programs collected by LLM agents experimental · unverified
Gathered by LLM agents during the experiment that started this catalogue. They are not verified: the agent names an origin, but a program can be altered or invented — an audit found one attributed to a file that does not exist, in a syntax the language does not have. Prefer the programs archived by Software Heritage above. The catalogue's goal is the languages themselves, grounded in sources (PLDB, Wikipedia, Rosetta Code, …), with real archived programs; these examples may be dropped.
N-Queens Problem
Provenance: commit d91ce84892 · authored 2026-02-28T19:53:26+01:00 · agent claude-code · model claude-sonnet-4-6 · WebSearch disabled
\: N queens problem solved in zoem.
\: This solution uses recursion (naturally), maintaining dictionaries
\: with push#1 and pop#1. It also uses a crude form of iteration
\: using apply#2. Failure is escalated back using throw#2 and catch#2.
\: This constitutes a non-trivial example of apply#2 / throw#2 / catch#2
\: used in conjunction.
\: A more customary solution is to use while#2 rather than the
\: latter method -- see 8q2.azm.
\: This solution has caused two zoem weak spots to be addressed:
\: - inability to cleanly assign a vararg to a data key.
\: -> now possible with \set{{modes}{u}}{%{key}}{{a}{b}{c}{e}{t}{c}}
\: - inability to effect global key updates while dictionaries are pushed.
\: -> now possible with \set{''key}{..} (and \''key access).
\if{\let{!\defined{key}{N} || \N < 1}}{
\write{stderr}{device}{Use e.g. zoem -i 8q -s N=9 to solve the 9-queen problem\@{\N}}
\set{N}{8}
}{}
\setx{N}{\let{floor(\N)}}
\set{n_backtrack}{0}
\set{p_backtrack}{0}
\: When updating these we have to be careful
\: to do it in the bottom global dictionary,
\: not in a higher stacked transient dictionary.
\set{%{lists}{0}}{}
\set{n1}{0}
\set{n}{1}
\: Precompute all lists that we are going to feed
\: to apply#2. This is only slightly wasteful.
\while{\let{\n<=\N}}{
\: This uses recently introduced primitive set#3.
\: The u modifier indicates the value argument
\: should not be parsed as a key-value list.
\set{{modes}{xu}}{%{lists}{\n}}{\%{lists}{\n1} {\n1}}
\set{%{positions}{\n}}{}
\setx{n1}{\n}
\setx{n}{\let{\n+1}}
}
\: for shorter print statement
\def{pp#1}{\%{positions}{\1}}
\:
\:
\: 5 | . . . . . .
\: 4 | . . * . . .
\: 3 | . . . . ? .
\: 2 | . * . . . .
\: 1 | . . . * . .
\: 0 | * . . . . .
\: |________________________
\: col: | 4 5 6 7
\: c: 0 1 2 3
\: for c in 0..col-1 get the position and see whether it
\: is compatible with col,row
\formatted{
\def{testcompat#1}{
\setx{c}{\1}
\if{\let{
\%{positions}{\c}==\row
|| abs(\%{positions}{\c}-\row) == abs(\col-\c)
}
}{\setx{''n_backtrack}{\let{\''n_backtrack+1}}
\throw{towel}{}
}{}
}
\: Try whether row would fit col.
\def{testrow#1}{
\push{testrow}
\setx{row}{\1}
\catch{towel}{
\apply{testcompat#1}{\%{lists}{\col}}
}
\: Alternative is to use \while rather than apply+catch
\: still, timing seems to be OK for this approach.
\if{\cmp{eq}{\__zoemstat__}{done}}{
\setx{%{positions}{\col}}{\row}
\if{\let{\col<\N-1}}{
\extendcol{\let{\col+1}}
}{
\write{\__fnout__}{device}{\@{\N}\pp{0}}
\set{t}{1}
\while{\let{\t<\N}}{
\write{\__fnout__}{device}{\`{s}\pp{\t}}
\setx{t}{\let{\t+1}}
}
\setx{d_bt}{\let{\''n_backtrack-\''p_backtrack}}
\write{\__fnout__}{device}{\ifdef{key}{trace}{\`{s}(\''n_backtrack, \d_bt)}\@{\n}}
\setx{''p_backtrack}{\''n_backtrack}
}
}{}
\pop{testrow}
}
\: 0..col-1 columns are OK
\: Try to extend to column col.
\def{extendcol#1}{
\push{extendcol}
\setx{col}{\1}
\apply{testrow#1}{\%{lists}{\N}}
\pop{extendcol}
}
}
\: vanish#1 omits the filter/output stage in an attempt
\: to gain some speed -- it only results in side effects (yay!)
\: such as the \write#2 invocation above.
\: However, because we used formatted#1 we really don't
\: gain anything as all result strings have length zero
\: anyway.
\vanish{\extendcol{0}}
\write{stderr}{device}{Backtracked \''n_backtrack times\@{\n}}