Prolog Programmers are Lazy

2026-05-12

Lazy Trinity

A good programmer is often someone who would rather spend five hours automating a task than spend five minutes repeating it every day for years. But “laziness” here does not mean unwillingness to work. Quite the opposite. It means a strong aversion to repetitive, unnecessary, error-prone manual effort.

The canonical framing comes from Larry Wall, creator of Perl, who listed laziness as one of the three great virtues of a programmer, alongside impatience and hubris. His point was that productive laziness — the refusal to do repetitive work by hand — drives programmers to write tools, scripts, and abstractions that pay off over time. A programmer who automates a tedious task is being “lazy” in the most constructive sense. It is what drives open-source libraries, code generators, and the entire culture of “don’t repeat yourself” (DRY). Spend a day writing a script that saves a week of manual work every month, and you have made a rational investment.

The most powerful expression of this instinct is the application platform: a pre-built, opinionated scaffold that packages the hard-won lessons of a community into a reusable starting point. Rather than assembling supervision trees, routing layers, persistence strategies, and deployment pipelines from scratch each time, a developer begins from a working system and customises inward. The platform does not constrain ambition — it removes the tax on getting started.

In the Prolog world, ClioPatria — an application platform developed by a team around Jan Wielemaker — demonstrated how a substantial web application could be delivered as a ready-to-run system: users provided their data, made modest extensions, and obtained a full Semantic Web portal. Other ecosystems show that this strategy works at scale. In the Elixir world, Phoenix goes even further by generating complete, fault-tolerant applications with supervision, telemetry, routing, and deployment already in place. Developers simply add the behaviour that makes the system theirs. These examples illustrate how a language ecosystem can supply standardised, reproducible scaffolds that capture the best practices of a community.

This is precisely the motivation behind the Prolog agent model and its turn-key nodes — ready-made, nearly complete applications that become operational as soon as domain logic and configuration are supplied. Turn-key nodes lower the threshold for participation by capturing proven patterns for supervision, communication, persistence, and deployment, sparing developers from boilerplate concerns and letting them focus on domain-specific reasoning and interaction.

To make this concrete: suppose the owner of a node wants to make the contents of a file mortal.pl available to clients. A single command is all that will be needed:

$ prolog-node --port=80 --src=mortal.pl --settings=settings.pl

A new node is created, the file is loaded into its shared Prolog database, and the node is configured according to settings.pl. After the usual deployment steps, the node is reachable through a set of standard API endpoints: a browsable database, an interactive shell, a stateless HTTP API, a semi-stateful HTTP API, and a stateful WebSocket API. An authorised user can browse the program, query it through the shell, or build an end-user application on top of any of its web APIs. None of that infrastructure needed to be written from scratch.

Because turn-key nodes act as agents in their own right, they can be queried, extended, and orchestrated alongside user-defined agents, keeping the environment uniform and easy to understand. Such simplicity and accessibility are essential if the Prolog Web is to grow into a living shared environment rather than remain a conceptual construct. In that sense, the laziness baked into the Trinity design is not a shortcut — it is a commitment to the idea that friction is the enemy of participation.

What kind of application do you have in mind? Pass the relevant API descriptions to an AI and describe what you want to build — a fast-paced multiplayer game, a sophisticated embodied conversational agent, a shared RDF triple store open to the world. The AI will tell you which endpoint fits and sketch the client code to go with it. Most applications need a UI, and the easiest way to build one is probably to ask Claude or ChatGPT to do it for you.

Prolog programmers are lazy. And that is exactly as it should be.