Twigでlispを作ってるんだナ!at TECH
Twigでlispを作ってるんだナ! - 暇つぶし2ch1:デフォルトの名無しさん
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 #}

2:デフォルトの名無しさん
24/07/07 12:07:25.52 Z9WWCnLov
{% 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 %}

3:デフォルトの名無しさん
24/07/07 12:07:56.87 Z9WWCnLov
{% 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 %}{% endif %}{% endmacro %}
{{ _self.evaluate("(+ 1 2 6)") }}{{ _self.evaluate("(* 2 3 2)") }}
{{ _self.evaluate("(- 10 3 2)") }} {{ _self.evaluate("(/ 15 3)") }}
{{ _self.evaluate("(if (eq? 3 3))(+ 1 2 6)") }}{{ _self.evaluate("(if (neq? 3 1))(+ 1 2 6)") }}

4:デフォルトの名無しさん
24/07/07 18:00:20.91 Z9WWCnLov
{% 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)}}

5:デフォルトの名無しさん
24/07/07 18:01:55.50 Z9WWCnLov
{% 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 %}
{{ _self.evaluate("(+ 1 2 6)") }}{{ _self.evaluate("(* 2 3 2)") }}{{ _self.evaluate("(- 10 3 2)") }} {{ _self.evaluate("(/ 15 3)") }}
{{ _self.evaluate("(if (eq? 3 3))(+ 1 2 6)") }}{{ _self.evaluate("(if (neq? 3 1))(+ 1 2 6)") }}{{ _self.evaluate("(for (range 6))(print doo") }}{{ _self.evaluate("(print shark") }}

6:デフォルトの名無しさん
24/07/07 18:04:36.27 Z9WWCnLov
すごく辛い事もあったけど
ここまで作れたんだナ

ありがとうだナ

7:デフォルトの名無しさん
24/07/07 19:33:23.85 Z9WWCnLov
{% 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)}}

8:デフォルトの名無しさん
24/07/07 19:34:26.56 Z9WWCnLov
{% 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 %}

9:デフォルトの名無しさん
24/07/07 19:37:05.08 Z9WWCnLov
{{ _self.evaluate("(+ 1 2 6)") }}{{ _self.evaluate("(* 2 3 2)") }}{{ _self.evaluate("(- 10 3 2)") }} {{ _self.evaluate("(/ 15 3)") }}
{{ _self.evaluate("(if (eq? 3 3))(+ 1 2 6)") }}
{{ _self.evaluate("(if (neq? 3 1))(+ 1 2 6)") }}
{{ _self.evaluate("(for (range 6))(print doo") }}{{ _self.evaluate("(print shark)") }}{{ _self.evaluate("(set a1 1)") }}{{ _self.evaluate("(call a1)") }}





定義した変数が読み込めないし
配列の書き換えはできないんだナ

配列は一番後ろの値を取得すれば
いいけど
変数は難しいんだナ

テンプレートエンジンの勉強に使うと良いんだナ!

10:デフォルトの名無しさん
26/02/13 00:37:36.44 jCnzBGJfN
例えば『JA9580』は「不正章男Gエアロトヨタ加藤浩士OЗ35220647」だか゛
クソ航空騒音被害は noise.wеb.fc2.com で犯人特定して連絡先確認
クレ―ム電話をすれは゛国土破壊省が許可してるだのと主張するた゛ろうか゛騒音まき散らして私権侵害する憲法無視の許可など出してはいない
しかも航空法では付近の建物最上部から高度300M以上か゛規定されてるが高層ビルだらけの都會て゛は違反だらけ
私人も定置場に集団て゛押しかけて現行犯逮捕できるわけで揉み合って死なせたとしても事故だから殺人には問われないし尾行して自宅特定や
法務局て゛取得した社長住所に襲撃に行ったり我々はそうした人権侵害テロをぶっ潰す社会貢献活動に送金したくて仕方がないわけた゛が
お前らの生活苦も税金て゛支援までされてる航空燃料によってクソ航空機が莫大な温室効果ガスまき散らして気候変動災害連発住民殺害物価暴騰
睡眠妨害免疫力低下病人倍増医療財源逼迫、労働生産性から國際競争力壊滅と日本を貧困化させてるのか゛原因、諸悪の根源を殲滅しよう!


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch