我正在编写一个简单的“ proc”来计算阶乘。我想了解为什么没有return语句我的函数将无法工作。
根据TCL文档,定义的函数无需显式的“返回”, 返回其主体中最后执行的命令的值。
proc fac { n } {
if { $n == 1 } {
return 1
}
puts $n
set n [expr {$n - 1}]
return [expr {[fac $n ] * $n}]
}
puts [fac 5] # ans 24
删除“返回”后,出现以下错误消息:
invalid command name "1"
while executing
"[expr {[fac $n ] * $n}] "
(procedure "fac" line 7)
invoked from within
我希望没有显式的“返回”,该函数也应返回24。
答案 0 :(得分:2)
您的期望是正确的。但是最后一行的expr
过程周围有方括号。是:
[expr {[fac $n] * $n}]
对于解释器来说,这意味着:1)用给定的参数执行expr
过程; 2)执行expr
过程的结果。因此,解释器尝试执行不存在的过程1
,并且您收到错误。
要解决此错误-只需从最后一行删除方括号即可:
proc fac { n } {
if { $n == 1 } {
return 1
}
puts $n
set n [expr {$n - 1}]
expr {[fac $n ] * $n}
}