マイケルソンロジックの理解の問題
-
-
この質問は、Tezos/Michelson固有の質問ではなく、後置記法とスタック評価に関する一般的な質問だと思う傾向があります.I tend to think this question is less a Tezos/Michelson specific question and more a general question about postfix notation and stack evaluation ?
- 1
- 2019-01-31
- Ezy
-
2 回答
- 投票
-
- 2019-02-01
次の方法でプログラムをシミュレートできます.
[...]
と操作の間にスタックを書き込みます.push <int>
、*
、+
の3つの異なる操作を使用します.push
は整数をスタックの一番上に置き、*
はスタックから2つの要素をポップしてそれらの積をプッシュし、+
はポップしますスタックから2つの要素を取り出し、それらの合計をプッシュします.プログラムは空のスタック
[]
といくつかの操作で始まります:[], push 3, push 4, push 5, *, + -> (evaluation of push 3) [3], push 4, push 5, *, + -> (evaluation of push 4) [3, 4], push 5, *, + -> (evaluation of push 5) [3, 4, 5], *, + -> (evaluation of *) [3, 20], + -> (evaluation of +) [23]
したがって、計算の結果は
23
になります.We can simulate the program in the following way. We write the stack between
[...]
and then the operations. We use three different operationspush <int>
,*
and+
.push
puts an integer at the top of the stack,*
pops two elements from the stack and pushes their product, and+
pops two elements from the stack and pushes their sum.Your program starts with an empty stack
[]
and some operations:[], push 3, push 4, push 5, *, + -> (evaluation of push 3) [3], push 4, push 5, *, + -> (evaluation of push 4) [3, 4], push 5, *, + -> (evaluation of push 5) [3, 4, 5], *, + -> (evaluation of *) [3, 20], + -> (evaluation of +) [23]
So the result of your computation is
23
. -
- 2019-01-31
'*'および '+'は、このコンテキストでは、慣れている中置演算子ではありません.左から右に読んで、数字を積み上げていくと想像してみてください.+または*が発生すると、スタックの上位2つの要素が操作の結果に置き換えられます.
'*' and '+', in this context, are not the infix operators you are used to. Imagine reading left to right and stacking up the numbers as you go. When you encounter + or * you replace the top two elements of the stack with the result of the operation.
正しければ、Michelsonはスタックベースの言語です.
スタックベースの言語に関する次の例を読みました:
マイケルソンは、3を加算する前に4 * 5を乗算する必要があることをどのように知っていますか?
私の考えを説明するだけです:
乗数が最初に来るので、私は次のように思います. 3 * 4 + 5=17
なぜそれが間違っているのですか?