2014-02-11 92 views
0

为什么在Tcl的交互模式下我不能使用w代替while?只有wh似乎工作:(见Ideone.com demo为什么我不能在Tcl的交互模式下使用'w`作为'while'?

info script {} 
set tcl_interactive 1 
set i 0 
wh {$i<10} {puts [incr i]} 

w似乎命令和特效的集合中很明确的:

puts [lsort [concat [info commands] [info procs]]] 

后追加申请阵列auto_execok auto_execok auto_import auto_import auto_load auto_load auto_load_index auto_load_index auto_qualify auto_qualify二进制中断案例catch cd chan时钟时钟关闭concat conti nue字典编码eof错误eval exec退出expr fblocked fconfigure fcopy文件fileevent flush for foreach格式获取glob global如果incr info interp连接lappend lassign lindex linsert list llength载入lrange lrepeat lreplace lreverse lsearch lset lsort命名空间打开软件包pid proc put pwd读取regexp regsub重命名回扫描谋设置套接字源分割字符串SUBST切换tclLog tclLog告诉时间跟踪未知的未知卸载未设置更新uplevel upvar变量vwait而

这个问题,就像另一个我刚才问,纯粹是抽象的,我注意到了这一点奇怪的行为,而代码打高尔夫球,并想更好地理解内部。

回答

1

不能使用w用于while因为Tcl的发现你的路径称为w上的程序(可能在全/usr/bin/w),它有利于,超过的Tcl的前缀匹配精确匹配命令。

你可能应该不是太懒了; wh应该可以工作。 (目前没有在所有承诺,我们不会在将来最终导致问题添加更多命令。)

% info commands w* 
while 
% w 1 {puts hi;break} 
0:02 up 89 days, 14:58, 12 users, load averages: 0.46 0.62 0.73 
USER  TTY  FROM    [email protected] IDLE WHAT 
% auto_execok w 
/usr/bin/w 
% wh 1 {puts hi;break} 
hi 
+0

的'auto_execok'是一个神奇的过程,查找如何运行一个名为外部命令(有时是不平凡的任务)。当然有记录。 –

+0

啊,这会清理起来。谢谢! (顺便说一句,这只适用于[代码高尔夫](http://codegolf.stackexchange.com/a/20570/14255) - 我不会在任何实际应用中使用它。)但它确实显示它可能会显着因为它取决于用户路径中的程序,所以依赖于交互式快捷方式是不稳定的... –

+0

Tcl在codegolf中通常不会像Perl中的那么短。 Protip:缩写子命令工作正常,你可以用'interp alias'做恶事。或者你可以选择颈静脉和部署压缩代码(在8.6中使用'zlib解压缩')。 ;-) –

相关问题