Twigでlispを作ってるんだナ!at TECHTwigでlispを作ってるんだナ! - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト1:デフォルトの名無しさん 24/07/06 22:03:11.80 pcJPW2j0N {% macro evaluate(expression) %} {% set result = _self._evaluate(expression|trim) %}{{ result }} {% endmacro %} {% macro _evaluate(expression) %} {% set num = 1 %} {# 前後の空白を取り除く #}{% set expr = expression|trim %} {# カッコで挟まれた部分を識別する #}{% if expr starts with '(' and expr ends with ')' %} {# 文字の部分だけをexprに代入 #}{% set expr = expr|slice(1, -1)|trim %} {% endif %} {# 空白で配列化 #}{% set components = expr|split(' ') %} {# 配列の1番目の記号で計算式を判別し #}{% set operator = components[0] %} {# 配列の2番目の番目以降の数字で配列を作る #} {% set operands = components[1:] %} {% if operator == '+' %} {% set result = operands|reduce((acc, item) => acc + item|number_format) %} {% 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) %} {% 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 %} {% else %}{% set result = "Unknown operation" %}{% endif %}{{ result }}{% endmacro %} {# Usage examples #} {{ _self.evaluate("(+ 1 2 3)") }} {# Output: 6 #} {{ _self.evaluate("(* 2 3 4)") }} {# Output: 24 #} {{ _self.evaluate("(- 10 3)") }} {# Output: 7 #} {{ _self.evaluate("(/ 15 3)") }} {# Output: 5 #} 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch