Страница 2 из 2

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

Добавлено: 24 окт 2024, 15:54
Sertik
Да, не понятно. Почему у меня не работает ?

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

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

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

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

Добавлено: 24 окт 2024, 16:29
Sertik
У меня вот это работает рекурсивно:

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

: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

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

Добавлено: 24 окт 2024, 17:05
Brook

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

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

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

Добавлено: 24 окт 2024, 19:33
Sertik
Не понял, а почему в консоль то не выводит ?

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

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

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

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

Добавлено: 24 окт 2024, 20:37
Sertik
OK, да, забыл. Где то читал об этом.