tailcall
Имя
tailcall — Заменить текущую процедуру другой командойСинтаксис
tailcall команда ?арг ...?Описание
Команда tailcall заменяет выполняемую в данный момент процедуру, применение лямбды или метод другой командой. Команда команда, которой будут переданы арг ... в качестве аргументов, если они указаны, будет найдена в текущем контексте пространства имён, а не в контексте вызывающей стороны. Помимо этого различия в разрешении, она эквивалентна:return [uplevel 1 [list command ?arg ...?]]
Данная команда не может быть вызвана изнутри uplevel в процедуру или внутри catch внутри процедуры или лямбды.
Пример
Вычисление факториала числа.proc factorial {n {accum 1}} {
if {$n < 2} {
return $accum
}
tailcall factorial [expr {$n - 1}] [expr {$accum * $n}]
} Вывод элементов списка с чередующимися строками, имеющими разные отступы.
proc printList {theList} {
if {[llength $theList]} {
puts "> [lindex $theList 0]"
tailcall printList2 [lrange $theList 1 end]
}
}
proc printList2 {theList} {
if {[llength $theList]} {
puts "< [lindex $theList 0]"
tailcall printList [lrange $theList 1 end]
}
} См. также
apply, proc, uplevel
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/tailcall.htm
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/tailcall.htm