В настоящее время я пытаюсь понять детали реализации следующей процедуры memoizing, как показано на severalvariants в Tcl вики:Детали реализации процедуры memoizing из Tcl вики
proc memoize {} {
global memo
set cmd [info level -1]
if {[info level] > 2 && [lindex [info level -2] 0] eq "memoize"} return
if {![info exists memo($cmd)]} {set memo($cmd) [eval $cmd]}
return -code return $memo($cmd)
}
Что является общим для всех из них (к моему пониманию), что они сравнивают первое слово команды бабушки и дедушки (lindex [info level -2] 0
) с буквально название этой функции, напоминающее имя (в данном случае "memoize"
).
Будет ли какой-либо недостаток изменения, чтобы это сравнение команды прародитель с этой командой, другими словами, изменение [lindex [info level -2] 0] eq "memoize"
к [info level -2] eq [info level 0]
?