Apply
означает применение функции для всего, что не является специальной формой (специальные формы рассматриваются в eval
). Apply
является рекурсивной функцией, которая будет всегда конечной sh.
Apply
подразделяется на 2 случая применения процедуры:
- внутренний в систему, которая реализует язык
Это место, где осуществляется переход между целевым языком и языком, который используется для реализации целевого языка (исходного языка).
Здесь необходимо оценить каждый параметр (через eval
) и преобразовать полученный объект в аналогичный объект на исходном языке, прежде чем вызывать функцию приложения исходного языка. Для некоторых параметров может произойти рекурсия eval->apply
.
- комбинация , созданная на целевом языке с использованием средств комбинации, которые обеспечивает целевой язык.
В этом случае вам также нужно рекурсивно вызывать eval
для каждого параметра и использовать функцию application на целевом языке. В этом случае вам не нужно преобразовывать результат eval
в объект на исходном языке.
Так что в случае комбинаций в apply
также есть рекурсия, но это своего рода рекурсия это закончится sh (функция приложения функции является примитивно-рекурсивной функцией ), потому что каждый раз вы вычисляете меньший фрагмент (оператор, операнды или полное начальное выражение).
Я думаю, что вы не заметили, что apply
является примитивно-рекурсивным оператором, и вы боялись, что он не закончится sh.