Почему компилятор сначала читает внутренний термин, а потом выходит? - PullRequest
0 голосов
/ 30 мая 2019

давайте предположим, что я что-то возвратил что-то1 (что-то2 (что-то3)); затем ПК сначала выполняет внутренний термин, а затем переходит к следующему термину, который является чем-то2, а затем переходит к следующему термину, который является чем-то1, мой вопрос, почему он идет таким образом и не идет наоборот, как это: сначала делает что-то1, потом что-то2, потом что-то3?

Ответы [ 2 ]

4 голосов
/ 30 мая 2019

На самом деле это так. Он хочет оценить (выполнить) something1. У этого есть один параметр, который он хочет передать. Но этот параметр является вызовом функции, поэтому сначала он должен вызвать эту функцию, чтобы получить результат. Так и называется something2. Но у этой функции есть 1 параметр, который она должна передать, поэтому она оценивает параметр something3.

Теперь все в порядке: он может вызвать something2 с вычисленным параметром, а затем получить возвращаемое значение этой функции, которое он передает something1.

Так что это делает ваше «сначала что-то1, потом что-то2, потом что-то3». За исключением того, что он не может сделать первое, не выполнив сначала второго, не выполнив сначала третьего. Что и требовалось доказать.

0 голосов
/ 30 мая 2019

На самом деле, это работает просто отлично. Давайте возьмем ваш собственный пример, вы хотите выполнить function1(function2(function3())),

Теперь, если ты сломаешь это, Сначала программа выполняет function1(), но function1() требует значения function2(), поэтому она переходит к выполнению function2(), и теперь function2() требует значения function3(), поэтому function3() получает казнены.

Просто кажется, что программа выполняется в обратном порядке, но на самом деле она работает регулярно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...