Строго говоря, команды обозначаются как процедуры без параметров, но система дает им возможность идентифицировать самих себя в тексте и, следовательно, прочитать и проинтерпретировать последующий текст, то есть их фактические параметры. Однако и чтение, и интерпретация должны программироваться явно.
Это, по сути, то же, что def-symbol-readmacro. Но не всем процедурам нужна такая же гибкость. А платить за неё приходится всегда. Цена высока: нет способа вызвать эту процедуру с параметрами из другой процедуры, и проверить их статически. Т.е. фактически в этом проекте создать команду с параметрами - то изрядный напряг:
- создать версию с параметрами для вызова из других процедур
- создать версию без параметров
- для версии без параметров написать парсер
- парсер должен из версии без параметров прочитать параметры и вызвать версию с параметрами
Сравнив это с тем же bash-ем или тиклем, где есть стандартный парсер параметров, получаем ад.
Лучшее решение - это, конечно же, лисп с Def-symbol-readmacro. Когда надо - он гибкий, как оберон. В остальных случаях - простой, как простая процедура в обероне (ну, конечно, не считая параметров-ключей и прочих роскошных штучек).
Хотя, если у нас культ простоты, то не нужны def-symbol-readmacro. Нужны только обычные функции и стандартный способ ввода параметров.