Я нашел некоторые объяснения открытой/закрытой рекурсии, но я не понимаю, почему определение содержит слово« рекурсия »или как оно сравнивается с динамической/статической диспетчеризацией. Среди объяснений, которые я нашел, есть:.Почему это называется «открытой (или закрытой) рекурсией?
Open рекурсии Еще одна удобная функция, предлагаемые большинством языков с объектами и классами, является возможность для одного метода тела, чтобы вызвать другой метод того же объекта с помощью специальная переменная, называемая
self
или, на некоторых языках,this
. Специальный поведение «я» заключается в том, что он связан с поздней задержкой, позволяя определенному методу в одном классе вызывать другой метод, который определен ниже, в некоторый подкласс первого. [Ralf Hinze]
... или в Wikipedia:
диспетчерских семантика
this
, а именно, что метод вызывает на это динамически отправляется, известен как открытой рекурсии, и означает, что они методы могут быть переопределены производными классами или объектами. Напротив, прямая именная рекурсия или анонимная рекурсия функции использует закрытую рекурсию с ранним связыванием.
Я также прочитал StackOverflow вопрос: What is open recursion?
Но я не понимаю, почему слово «рекурсия» используется для определения. Конечно, это может привести к интересному (или опасному) побочному эффекту, если вы используете «открытую рекурсию», выполнив ... метод рекурсивного вызова. Но определения не принимают рекурсивный вызов метода/функции непосредственно во внимание (добавьте «закрытую рекурсию» в определение Википедии, но это звучит странно, поскольку «открытая рекурсия» не относится к рекурсивному вызову).
Вы знаете, почему в определении есть слово «рекурсия»? Это потому, что оно основано на другом определении компьютерной науки, о котором я не знаю? Должно просто сказать «динамическая отправка» не хватит?
Спасибо! Ваше сообщение в блоге очень ясно и действительно отвечает на мои вопросы.Таким образом, все это происходит из словаря функционального программирования. Также спасибо за ваши рекомендации. –
Мать языков программирования - это лямбда-исчисление, поэтому все относится к функциям. Но ИМХО, фраза «... все исходит из словаря функционального программирования» завышена; трудно понять, почему «открытая рекурсия» должна существовать (ваш вопрос является конкретным примером), не задумываясь о моделях объектов. –