Cygwin TCL阶乘计算代码:右大括号后的额外字符
这是TCL中的代码,用于生成用户作为参数给定的数字的阶乘Cygwin TCL阶乘计算代码:右大括号后的额外字符,cygwin,tcl,Cygwin,Tcl,这是TCL中的代码,用于生成用户作为参数给定的数字的阶乘 if {$argc !=1}{ puts stderr "Error! ns called with wrong number of arguments! ($argc)" exit 1 } else set f [lindex $argv 0] proc Factorial {x}{ for {set result 1} {$x>1}{set x [expr $x - 1]}{ set re
if {$argc !=1}{
puts stderr "Error! ns called with wrong number of arguments! ($argc)"
exit 1
} else
set f [lindex $argv 0]
proc Factorial {x}{
for {set result 1} {$x>1}{set x [expr $x - 1]}{
set result [expr $result * $x]
}
return $result
}
set res [Factorial $f]
puts "Factorial of $f is $res"
有一个类似的例子,但它似乎没有直接解决我的问题。我仔细检查了代码的语法错误,但它没有通过tclsh
在Cygwin中成功编译,从而产生错误:
$ tclsh ext1-1.tcl
extra characters after close-brace
while executing
"if {$argc !=1}{
puts stderr "Error! ns called with wrong number of arguments! ($argc)"
exit 1
} else
set f [lindex $argv 0]
proc Factorial {x}{..."
(file "ext1-1.tcl" line 3)
TCL代码来自:NS Simulator for初学者,Sophia Antipolis,2003-2004TCL比大多数语言(尽管不如Python)对空格更敏感。例如,除了作为命令分隔符的命令之间,不能添加未缩放的换行符。另一组规则是:1)每个命令必须以与适当列表相同的方式编写(其中元素由空格分隔);2)命令调用必须具有命令定义指定的参数数量 由于调用必须看起来像一个正确的列表,因此
... {$x>1}{incr x -1} ...
不起作用:以大括号开头的列表元素必须以匹配的右大括号结尾,并且右大括号后面不能有与初始大括号匹配的文本。(这听起来比实际情况更复杂。)
参数数量要求意味着
for {set result 1} {$x>1}{incr x -1}{
set result [expr $result * $x]
}
不会工作,因为for
命令需要四个参数(开始测试下一个body),而它只得到两个,开始和其他三个参数的mashup(实际上甚至没有,因为mashup是非法的)
要实现这一点,需要将参数分开:
for {set result 1} {$x>1} {incr x -1} {
set result [expr {$result * $x}]
}
添加空格(或制表符,如果您愿意)可以使参数合法且在数量上正确。Tcl比大多数语言(尽管不如Python)对空格更敏感一些。例如,除了作为命令分隔符的命令之间,不能添加未缩放的换行符。另一组规则是:1)每个命令必须以与适当列表相同的方式编写(其中元素由空格分隔);2)命令调用必须具有命令定义指定的参数数量 由于调用必须看起来像一个正确的列表,因此
... {$x>1}{incr x -1} ...
不起作用:以大括号开头的列表元素必须以匹配的右大括号结尾,并且右大括号后面不能有与初始大括号匹配的文本。(这听起来比实际情况更复杂。)
参数数量要求意味着
for {set result 1} {$x>1}{incr x -1}{
set result [expr $result * $x]
}
不会工作,因为for
命令需要四个参数(开始测试下一个body),而它只得到两个,开始和其他三个参数的mashup(实际上甚至没有,因为mashup是非法的)
要实现这一点,需要将参数分开:
for {set result 1} {$x>1} {incr x -1} {
set result [expr {$result * $x}]
}
放入空格(或制表符,如果您愿意)可以使参数合法且数量正确。它应该是
proc Factorial{x}{
。只需在两者之间添加一个空格。与条件相同:如果{$argc!=1},则应该是{
。这就是导致错误的原因。代码中到处都会出现相同的问题。分隔所有参数非常重要。它应该是proc Factorial{x}{
。只需在两者之间添加一个空格。与条件相同:如果{$argc!=1},则应该是{
。这就是导致错误的原因。代码中到处都会出现相同的问题。分隔所有参数非常重要。