Skip to content

Реализация условной конструкции If и обновление документации и версии до 0.0.4#28

Merged
netkeep80 merged 3 commits intonetkeep80:mainfrom
konard:issue-17-7112fdc3fe12
Feb 6, 2026
Merged

Conversation

@konard
Copy link
Contributor

@konard konard commented Feb 6, 2026

Summary

Fixes #17

Реализация условной конструкции If (if-then-else) через ассоциативные структуры — следующая задача в текущей фазе разработки (Фаза 2: Функциональность, Направление 2: Платформа для логического программирования).

Что реализовано

  1. Условная конструкция If в базовом словаре (include/avm.h)

    • Новая статическая сущность rel_t::If в базовом словаре
    • Таблица истинности через entity map: IF[True] = True, IF[False] = False
    • If является сущностью (If->sub == E)
  2. Поддержка If в интерпретаторе (src/main.cpp)

    • Добавлен If в resolve_operator() для распознавания оператора
    • Ленивое вычисление в interpret(): вычисляется только нужная ветка (then или else)
    • Формат выражений: {"If": [condition, then_expr, else_expr]}
  3. 22 новых модульных теста (test/unit_test.cpp)

    • test_if_vocabulary() — проверка наличия If в базовом словаре
    • test_if_eval() — таблица истинности If через eval()
    • test_interpret_if_basic() — базовые условные выражения
    • test_interpret_if_with_expressions() — If с логическими операциями в условии
    • test_interpret_if_nested() — вложенные If и комбинации с NOT/AND/OR
    • test_interpret_if_error_cases() — обработка ошибок (неверное количество аргументов, null условие)
  4. 3 новых тестовых JSON файла

    • test/expr_if_true.json{"If": [true, true, false]}true
    • test/expr_if_false.json{"If": [false, true, false]}false
    • test/expr_if_nested.json{"If": [{"And": [true, true]}, {"Not": [false]}, {"Or": [false, false]}]}true
  5. Обновление версии и документации

    • Версия: 0.0.3 → 0.0.4
    • README.md: обновлены Features, Current Status, Usage (обе секции EN/RU)
    • plan.md: задача "Условные конструкции" отмечена как выполненная, обновлен Roadmap
    • analysis.md: обновлены метрики (147 тестов, 24 JSON файла)

Принцип работы

If реализован как условная конструкция с ленивым вычислением (lazy evaluation):

{"If": [condition, then_expr, else_expr]}
  1. Вычисляется condition (рекурсивно через interpret())
  2. Проверяется через entity map: If[condition]
  3. Если True → вычисляется и возвращается then_expr
  4. Если False → вычисляется и возвращается else_expr
  5. Иначе → возвращается E (null)

Ключевое отличие от логических операций: только одна ветка вычисляется, вторая игнорируется.

Примеры

# Простое условие
echo '{"If": [true, true, false]}' > cond.json
./avm cond.json
cat res.json  # true

# Условие с логическими операциями
echo '{"If": [{"And": [true, true]}, {"Not": [false]}, {"Or": [false, false]}]}' > expr.json
./avm expr.json
cat res.json  # true

Файлы изменены

  • include/avm.h — добавлена сущность If и таблица истинности
  • src/main.cpp — добавлен If в resolve_operator() и ленивое вычисление в interpret()
  • test/unit_test.cpp — 22 новых теста (всего 147)
  • test/expr_if_true.json, test/expr_if_false.json, test/expr_if_nested.json — тестовые выражения
  • CMakeLists.txt — версия 0.0.4
  • README.md — обновлена документация (EN + RU)
  • plan.md — задача отмечена как выполненная
  • analysis.md — обновлены метрики

Test plan

  • 147 модульных тестов проходят (147 passed, 0 failed)
  • 16 JSON roundtrip тестов проходят
  • Файлы в пределах лимита 1500 строк (main.cpp: 584, avm.h: 473, unit_test.cpp: 633)
  • Сборка успешна на Linux (локально)
  • CI на Ubuntu, Windows, macOS

🤖 Generated with Claude Code

konard and others added 2 commits February 6, 2026 17:57
Adding CLAUDE.md with task information for AI processing.
This file will be removed when the task is complete.

Issue: netkeep80#17
@konard konard changed the title [WIP] Сделать следующую задачу в текущей фазе разработки и после обновить README.md и файл фазы разработки Реализация условной конструкции If и обновление документации и версии до 0.0.4 Feb 6, 2026
@konard konard marked this pull request as ready for review February 6, 2026 17:08
@konard
Copy link
Contributor Author

konard commented Feb 6, 2026

🤖 Solution Draft Log

This log file contains the complete execution trace of the AI solution draft process.

💰 Cost estimation:

  • Public pricing estimate: $9.498370 USD
  • Calculated by Anthropic: $6.008696 USD
  • Difference: $-3.489673 (-36.74%)
    📎 Log file uploaded as Gist (1545KB)
    🔗 View complete solution draft log

Now working session is ended, feel free to review and add any feedback on the solution draft.

@netkeep80 netkeep80 merged commit 68f7fa3 into netkeep80:main Feb 6, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants