{% macro evaluate(expression) %}{% set result = _self._evaluate(expression|trim) %}{{ result }}{% endmacro %} {% macro _evaluate(expression) %}{% set num = 1 %} {% set expr = expression|trim %}{% set expr = expr|split(')(') %}{% set expra = expr[0] %} {% set expra = expra|trim('(')|trim(')')|trim %}{% set components = expra|split(' ') %} {% set operator = components[0] %}{% set operands = components[1:] %} {% if operator == '+' %}{{_self._keisan(operator,operands)}} {% elseif operator == '-' %}{{_self._keisan(operator,operands)}}{% elseif operator == '*' %}{{_self._keisan(operator,operands)}} {% elseif operator == '/' %}{{_self._keisan(operator,operands)}}{% elseif operator == 'if' %}{% set a = operands[0]|trim('(') %} {% set b = operands[1] %}{% set c = operands[2]|trim(')') %}{% if a == 'eq?' %}{% if b == c %}{% set result = "true" %} {% set expra = expr[1] %}{% set expra = expra|trim('(')|trim(')')|trim %}{% set components = expra|split(' ') %} {% set operator = components[0] %}{% set operands = components[1:] %} {{_self._keisan(operator,operands)}}{% else %} {% set result = "false" %}{% endif %}{% elseif a == 'neq?' %}{% if b != c %}{% set result = "true" %} {% set expra = expr[1] %}{% set expra = expra|trim('(')|trim(')')|trim %}{% set components = expra|split(' ') %} {% set operator = components[0] %}{% set operands = components[1:] %}{{_self._keisan(operator,operands)}} {% else %}{% set result = "false" %}{% endif %}{% endif %}{% else %}{% set result = "Unknown operation" %} {% endif %}{{ result }}{% endmacro %}
{% macro evaluate(expression) %}{% set result = _self._evaluate(expression|trim) %}{{ result }} {% endmacro %} {% macro _evaluate(expression) %}{% set num = 1 %}{% set i = 0 %}{% set expr = expression|trim %}{% set expr = expr|split(')(') %} {% set expra = expr[0] %}{% set expra = expra|trim('(')|trim(')')|trim %}{% set components = expra|split(' ') %} {% set operator = components[0] %}{% set operands = components[1:] %}{% if operator == '+' %}{{_self._keisan(operator,operands)}} {% elseif operator == '-' %}{{_self._keisan(operator,operands)}} {% elseif operator == '*' %}{{_self._keisan(operator,operands)}} {% elseif operator == '/' %}{{_self._keisan(operator,operands)}} {% elseif operator == 'print' %}{{_self._keisan(operator,operands)}} {% elseif operator == 'for' %}{% set a = operands[0]|trim('(') %} {% set b = operands[1]|trim(')') %}{% if a == "range" and i < b|number_format %}{% for i in 1..b %}{% set expra = expr[1] %} {% set expra = expra|trim('(')|trim(')')|trim %}{% set components = expra|split(' ') %}{% set operator = components[0] %} {% set operands = components[1:] %}{{_self._keisan(operator,operands)}} {% set i = i + 1 %}{% endfor %}{% endif %} {% elseif operator == 'if' %}{% set a = operands[0]|trim('(') %}{% set b = operands[1] %}{% set c = operands[2]|trim(')') %} {% if a == 'eq?' %}{% if b == c %}{% set result = "true" %}{% set expra = expr[1] %}{% set expra = expra|trim('(')|trim(')')|trim %} {% set components = expra|split(' ') %}{% set operator = components[0] %}{% set operands = components[1:] %}{{_self._keisan(operator,operands)}}
{% macro evaluate(expression) %}{% set result = _self._evaluate(expression|trim) %}{{ result }} {% endmacro %} {% macro _evaluate(expression) %}{% set num = 1 %}{% set i = 0 %}{% set n1 = 1 %}{% set hai1 = [] %}{% set hai2 = [] %} {% set expr = expression|trim %}{% set expr = expr|split(')(') %} {% set expra = expr[0] %}{% set expra = expra|trim('(')|trim(')')|trim %}{% set components = expra|split(' ') %} {% set operator = components[0] %}{% set operands = components[1:] %}{% if operator == '+' %}{{_self._keisan(operator,operands)}} {% elseif operator == '-' %}{{_self._keisan(operator,operands)}} {% elseif operator == '*' %}{{_self._keisan(operator,operands)}} {% elseif operator == '/' %}{{_self._keisan(operator,operands)}} {% elseif operator == 'print' %}{{_self._keisan(operator,operands)}} {% elseif operator == 'set' %}{% set hai1 = operands[0]|trim('(') %}{% set hai2 = operands[1]|trim(')') %}{{hai1}}:{{hai2}}{% elseif operator == 'call' %} {{ operands[0]|trim('(') in hai1 ? 'あった':'ない'}}{% elseif operator == 'for' %}{% set a = operands[0]|trim('(') %} {% set b = operands[1]|trim(')') %}{% if a == "range" and i < b|number_format %}{% for i in 1..b %}{% set expra = expr[1] %} {% set expra = expra|trim('(')|trim(')')|trim %}{% set components = expra|split(' ') %}{% set operator = components[0] %} {% set operands = components[1:] %}{{_self._keisan(operator,operands)}} {% set i = i + 1 %}{% endfor %}{% endif %} {% elseif operator == 'if' %}{% set a = operands[0]|trim('(') %}{% set b = operands[1] %}{% set c = operands[2]|trim(')') %} {% if a == 'eq?' %}{% if b == c %}{% set result = "true" %}{% set expra = expr[1] %}{% set expra = expra|trim('(')|trim(')')|trim %} {% set components = expra|split(' ') %}{% set operator = components[0] %}{% set operands = components[1:] %}{{_self._keisan(operator,operands)}}
{% else %}{% set result = "false" %}{% endif %}{% elseif a == 'neq?' %}{% if b != c %}{% set result = "true" %}{% set expra = expr[1] %} {% set expra = expra|trim('(')|trim(')')|trim %}{% set components = expra|split(' ') %}{% set operator = components[0] %} {% set operands = components[1:] %}{{_self._keisan(operator,operands)}} {% else %}{% set result = "false" %}{% endif %}{% endif %}{% else %} {% set result = "Unknown operation" %}{% endif %}{{ result }} {% endmacro %}{% macro _keisan(operator,operands) %}{% set num = 1 %} {% if operator == '+' %}{% set result = operands|reduce((acc, item) => acc + item|number_format) %}{{ result }} {% elseif operator == '-' %} {% for item in operands %}{% if num == 1 %}{% set totalPrice = item|number_format %}{% set num = num + 1 %}{% else %}{% set num = num + 1 %} {% set totalPrice = totalPrice - item|number_format %}{% endif %}{% if num == operands|length + 1 %}{{ totalPrice }} {% endif %}{% endfor %} {% elseif operator == '*' %}{% set result = operands|reduce((acc, item) => acc * item|number_format,1) %}{{ result }} {% elseif operator == '/' %} {% for item in operands %}{% if num == 1 %}{% set totalPrice = item|number_format %}{% set num = num + 1 %}{% else %}{% set num = num + 1 %} {% set totalPrice = totalPrice / item|number_format %}{% endif %}{% if num == operands|length + 1 %}{{ totalPrice }} {% endif %}{% endfor %} {% elseif operator == 'print' %}{% for item in operands %}{{ operands[p|number_format] }} {% set p = p + 1 %}{% endfor %}{% endif %}{% endmacro %}