Ограниченная постфиксная арифметика
StackSundial — рабочее пространство Windows для проверки небольших арифметических интерпретаторов с ИИ. Проследите стек операндов в диалоге, затем проверьте пути отказа и семантику деления в предложенных моделью правках.
def postfix_value(tokens):
tokens = tuple(tokens)
if not 1 <= len(tokens) <= 100:
raise ValueError("tokens.limit")
stack = []
for token in tokens:
if type(token) is int and abs(token) <= 1000000000:
stack.append(token)
continue
if type(token) is not str or token not in ("+", "-", "*", "//") or len(stack) < 2:
raise ValueError("token.invalid")
right, left = stack.pop(), stack.pop()
if token == "//" and right == 0:
raise ValueError("division.zero")
value = (left + right if token == "+" else left - right if token == "-" else left * right if token == "*" else left // right)
if abs(value) > 10**18:
raise ValueError("result.range")
stack.append(value)
if len(stack) != 1:
raise ValueError("stack.remainder")
return stack[0]- Проект
- Проверьте отрицательное деление с округлением вниз и отклоняйте деление на ноль, неполный стек или промежуточный модуль выше 10**18.
- Проверьте перед применением
- Сравните фактическое поведение с ожидаемым. Если проверка не проходит, разберитесь в причине перед следующими изменениями.
- Подключение
- Базовый URL, учётные данные и доступный сервер.
def postfix_value(tokens):
tokens = tuple(tokens)
if not 1 <= len(tokens) <= 100:
raise ValueError("tokens.limit")
stack = []
for token in tokens:
if type(token) is int and abs(token) <= 1000000000:
stack.append(token)
continue
if type(token) is not str or token not in ("+", "-", "*", "//") or len(stack) < 2:
raise ValueError("token.invalid")
right, left = stack.pop(), stack.pop()
if token == "//" and right == 0:
raise ValueError("division.zero")
value = (left + right if token == "+" else left - right if token == "-" else left * right if token == "*" else left // right)
if abs(value) > 10**18:
raise ValueError("result.range")
stack.append(value)
if len(stack) != 1:
raise ValueError("stack.remainder")
return stack[0]Определите возможности выражения до изменения его парсера
Обработке выражений нужны чёткие границы даже в небольшом языке. StackSundial — среда программирования с ИИ для Windows, где эти границы обсуждаются рядом с исходными файлами. Откройте проект и попросите подключённую модель изучить допустимые токены, правила вычисления и обработку ошибок вызывающим кодом до предложения изменения реализации.
Возможная задача — проверка постфиксного вычислителя для внутреннего экрана расчётов. Укажите допустимые операторы, численные пределы и реакцию на некорректные выражения. Попросите помощника определить места соблюдения требований и предложить целевые правки там, где их нет. Так обсуждение посвящено сопровождению вашей программы, а не просто созданию очередного вычислителя.
Уделяйте путям отказа столько же внимания, сколько успешной арифметике. Запустите проверки проекта для отсутствующих операндов, лишних результатов, деления на ноль и значений за допустимыми пределами. Проверьте порядок операндов в некоммутативных операциях и получение нужной ошибки вызывающим кодом. Не принимайте укороченный цикл вычисления, если он ослабляет окружающий контракт.
StackSundial поддерживает подключения к конечным точкам, совместимым с OpenAI или Anthropic. При доступности выбирайте модель ИИ с абляцией ограничений, понимая, что ограничения, пределы контекста и инструменты зависят от выбранного сервиса. Предложенный код остаётся отправной точкой для изучения и вашей проверки, а не свидетельством готовности интерпретатора.
Перед принятием правки вычислителя
- Какие правила включить в описание задачи?
Укажите допустимые токены, типы операндов, численные пределы и поведение ошибок. Добавьте вызывающий код, показывающий ошибки пользователям. Без этих правил предложение может правильно вычислять обычные примеры, но принимать выражения, которые приложение должно отклонять.
- Зачем явно тестировать вычитание и деление?
Их результаты зависят от порядка операндов, в отличие от сложения в обычных случаях. Используйте примеры с явно различными результатами при перестановке операндов. Проверьте требуемое проектом соглашение о делении и реакцию на нулевой делитель.
- Должны ли некорректные выражения возвращать ноль?
Только если это явное требование приложения. Правдоподобное резервное число может скрыть плохой ввод. Попросите помощника сохранить ясный путь отказа и изучите, как вызывающий код отличает правильный нулевой результат от ошибки.
- Достаточно ли лимита токенов для ограничения вычисления?
Проверьте все необходимые проекту ограничения, включая промежуточные значения и допустимую структуру входа. Число токенов отвечает лишь на часть контракта. Тестируйте соответствующие пути отказа после каждого изменения цикла вычисления.
StackSundial · Обновлено 2026-10-25