Рекурсивный вызов функции

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Sertik
Сообщения: 1658
Зарегистрирован: 15 сен 2017, 09:03

Да, не понятно. Почему у меня не работает ?

Это работает у Вас ?

Код: Выделить всё

:global CountDown do={
:if ($1>0) do={:put $1; :set $1 ($1-1); execute="[$0 $1]"}
:return "end"
}
или надо обязательно писать execute script= ?


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Sertik
Сообщения: 1658
Зарегистрирован: 15 сен 2017, 09:03

У меня вот это работает рекурсивно:

Код: Выделить всё

:global CountDown do={
:if ($1>0) do={:put $1; :set $1 ($1-1);[[:parse "global $[:pick $0 1 [:len $0]]; [$0 $1]"]];}
:return "end"
}
:put [$CountDown 5]

5
4
3
2
1
end

а это нет:

Код: Выделить всё

:global CountDown1 do={
:if ($1>0) do={:put $1; :set $1 ($1-1); execute script="[$0 $1]"}
:return "end"
}
:put [$CountDown1 5]

5

И без :return тоже не работает.

Код: Выделить всё

:global CountDown1 do={
:if ($1>0) do={:put $1; :set $1 ($1-1); execute script="[$0 $1]"}
:return "end"
}
:put [$CountDown1 5]

5

Так что нет, :parse есть :parse


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
Brook
Сообщения: 156
Зарегистрирован: 24 май 2022, 00:29

Код: Выделить всё

:global CountDown1 do={
:if ($1>0) do={:put $1; :set $1 ($1-1); execute script="[$0 $1]"}
:return "end"
}
Этот код отрабатывает, просто в консоль не выводит. Замените :put на :log info и Вы увидите, что всё работает.


Sertik
Сообщения: 1658
Зарегистрирован: 15 сен 2017, 09:03

Не понял, а почему в консоль то не выводит ?


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
Brook
Сообщения: 156
Зарегистрирован: 24 май 2022, 00:29

Sertik писал(а): 24 окт 2024, 19:33 Не понял, а почему в консоль то не выводит ?
Консоль, с точки зрения ОС, это процесс. Когда Вы запускаете команду в консоли, она отрабатывает в контексте этого процесса.

Командой :execute запускается отдельный процесс, который к консоли уже никак не привязан и поэтому вывести в нее он ничего не может.


Sertik
Сообщения: 1658
Зарегистрирован: 15 сен 2017, 09:03

OK, да, забыл. Где то читал об этом.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Ответить