Общая цель, которую я имею, состоит в том, чтобы сгенерировать логическое выражение в (C -тиле), а также хочу создать таблицу истинности или нечто подобное.
У меня есть макрос в ветке, который генерирует логическое значение выражение случайно [например, (a && c) || ! b]
{% macro randomexpr(depth) %}
{% from _self import randomexpr as expr %}
{% if depth >= 5 %}{# Leaf nodes are random operands #}
{{- random(["a", "b", "c", "d","!a", "!b", "!c", "!d"]) -}}
{% else %}{# Internal nodes are of the form ( expr op expr ) #}
{{- random(['(', '(', '!(']) -}}
{{- expr(depth + 1 + random(3)) -}}
{{- random(['||', '&&']) -}}
{{- expr(depth + 1 + random(3)) -}}
{{- ')' -}}
{% endif %}
{% endmacro %}
{% import _self as exp %}
{ "expression": "{{ exp.randomexpr(0) }}"}
Я хотел бы оценить это выражение для всех комбинаций a, b, c и d.
Я создал второй макрос (таблицу), который загружает такое уравнение и преобразует выражение "C" в выражение "Twig". Но я новичок в Twig и не знаю, есть ли способ оценить это выражение ??
{% macro table() %}
{% set equation = exp.randomexpr(0) %}
{{ equation }}
{% set new_eq = equation|replace({'!': 'not ', '&&': 'and', '&&': 'and', '||': 'or'}) %}
{% for a in range(0, 1) %}
{% for b in range(0, 1) %}
{% for c in range(0, 1) %}
{% for d in range(0, 1) %}
{{ new_eq }}
{% endfor %}
{% endfor %}
{% endfor %}
{% endfor %}
{% endmacro table%}
Но как я могу оценить new_eq с фактическими значениями для a, b, c, и д ??