Spec-Zone.ru › Tcl/Tk

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API