Функция рекурсии, что происходит в SAS? - PullRequest
0 голосов
/ 01 января 2012

У меня есть такой сценарий: рекурсивная процедура (или функция) вызывается как

{DoSomething Data C}

и C - переменная, которая должна хранить конечный результат, прототип функции -

proc {DoSomething Data N}
     %.. 
     %.. 
     {DoSomething Data M}
     N = 1 + M
end

и N - это переменная, которая также должна хранить конечный результат, но в локальной области действия процедуры.

Теперь мне сказали, что сначала, когда вызывается процедура, SAS:

image

Обратите внимание на наборы эквивалентности между C и N (на данный момент оба не связаны)

затем, после того как все рекурсии завершены, SAS будет

image

обратите внимание, что и C, и N связаны со значением (6)

После выхода из процедуры SAS остается с

image

потому что вы уничтожаете переменную N. И это нормально.

Мой вопрос: что происходит во время процедурных рекурсий? Связана ли переменная C с частичной структурой значений 1 + M? А потом в следующий раз М ссылки на 1 + М2?

1 Ответ

1 голос
/ 01 января 2012

Нет, в Oz нет частичных структур, пока мы говорим о простой целочисленной арифметике.

Этот оператор:

N = 1 + M

будет блокироваться до тех пор, пока M не будет полностью определен, т. е. связан с целым числом.

Чтобы действительно понять, что происходит, мне нужно увидеть полный код.Но я предполагаю, что есть базовый случай, который возвращает конкретное значение.Как только базовый случай достигнут, рекурсия «всплывет», добавив 1 к результату внутреннего вызова.

Другими словами, привязка C изменится только в концесамый внешний вызов процедуры, где M равен 5, а C поэтому связан с 6.

...