【发布时间】:2019-07-17 19:14:15
【问题描述】:
我正在编写一个简单的“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
当“return”被删除时,我收到以下错误消息:
invalid command name "1"
while executing
"[expr {[fac $n ] * $n}] "
(procedure "fac" line 7)
invoked from within
我预计如果没有明确的“返回”,该函数也应该返回 24。
【问题讨论】:
-
你为什么认为
5! == 24? -
这不能回答你的问题,但可以这样实现:
proc ::tcl::mathfunc::fac {n} { expr {$n == 1 ? 1 : $n * fac($n - 1)} }然后expr {fac(6)} -
您的 proc 在 Tcl 8.5 或 8.6 上没有返回任何错误...只是您计算阶乘的方式不正确。