首页 > 编程语言 >[ Tcl ] 如何实现类似 Perl 中 shift 函数的效果

[ Tcl ] 如何实现类似 Perl 中 shift 函数的效果

时间:2023-02-05 17:13:06浏览次数:48  
标签:set puts shift list Perl Tcl foo

https://www.cnblogs.com/yeungchie/

函数功能

Perl 中 shift 函数可以返回列表的第一个元素,并将后续所有元素向前移位( 索引值减 1 )。输入可选,默认为 @_ 或者 @ARGV

my @foo  = qw( 1 2 3 4 );
say shift @foo;
# 1
say @foo;
# 234

在某些版本的 Tcl 中函数 lshift 可以实现类似效果,或者使用 struct::list 包:

package require struct::list
set foo { 1 2 3 4 }
puts [::struct::list shift foo]
# 1
puts $foo
# 2 3 4

但某些 EDA 工具中内置的 Tcl 版本较旧,或者做了精简,无法使用上面提到的方法,所以下面自己来实现一下。

Tcl 实现

proc shift { sym } {
    upvar 1 $sym foo
    if { ! [info exists foo] } {
        error "can't read \"$sym\": no such variable"
    }
    set foo [lassign $foo[unset foo] var0]
    return $var0
}

测试

列表迭代

set a {3 1 2 5 4}
# 3 1 2 5 4
shift a
# 3
shift a
# 1
puts $a
# 2 5 4

循环中应用

set a {1 2 {} 4 {}}
# 1 2 {} 4 {}
while { [llength $a] } {
    puts [shift a]
}
# 1
# 2
# 
# 4
# 

标签:set,puts,shift,list,Perl,Tcl,foo
From: https://www.cnblogs.com/yeungchie/p/17092844.html

相关文章

  • ShiftMediaProject具体使用
    前文《ShiftMediaProject项目介绍》已经介绍了项目的bat脚本以及依赖逻辑。了解了bat脚本的逻辑,我们就不需要使用这个脚本了,可以手动下载特定版本的压缩包。现在的目录......
  • 手撕fft系列之频移fftshift源码解析
    壹:fft在数字信号处理领域是一个神一样的存在。要好好熟悉一下。这里给出频移的算法源码解析。所谓的频移,就是把数字信号的频频顺序打乱,移动一些。这个在防止啸叫和......
  • jenkins访问报错AWT is not properly configured on this server. Perhaps you need t
      貌似是AWT组件中FontConfiguration组件出现一些问题。隐约记得好想OpenJDK的某一个坑。OpenJDK和OracleJDK之间其中一个差别是:OpenJDK对某一些组件类似上面的字体......
  • 解决 shift 时常导致输入法切换的问题
    由于左shift每次使用完以后可能会导致中英文切换,固使用autohotkey,左shift只承担shift功能,右shift点按可以切换语言,脚本使用在这里->但是下载并使用后,发现我自己的浏览器上......
  • Ubuntu安装NextCloud
    在UbuntuServer22.04环境下安装。sudosnapinstallnextcloudsudonextcloud.manual-installUsernamePassword(NextCloud登陆用户)sudonextcloud.occconfig:system:......
  • Linux 常用替换命令三种方法(perl、shell、sed)
    举例在文件服务器上有一文件,文件名字:aaa.txt文件内容为:name=guodongsex=nanage=1001、perl:find-name'文件名'|xargsperl-pi-e's|被替换的字符串|替换后的字......
  • GetWindowRect与GetClientRect
    先调用GetWindowRect后再调用ScreenToClient,这个时候得到的rect和直接使用GetClientRect得到的值是相等的。有时候需要获得窗口矩形的大小和客户区矩......
  • tcl 数据列表
      salutealtairFXJ图1 生成列表及列表中元素的取用(正取,反取) 图2取出范围内的元素  图3插入元素  图4列表合并......
  • vue学习之-----移动端插件FastClick
    1、为什么要使用fastclick(1)移动端的浏览器,默认会在用户点击屏幕300ms延迟之后,才会触发点击事件【为了检查用户是否在做双击】,为了能立即响应用户的点击事件,所以有了fastcl......
  • Bash/Shell自建助手函数:ucase、lcase:借助perl一键转换字符串字母为大小或小写
    概述ucase=>转换字母为大写lcase=>转换字母为小写直接在终端中调用ucase、lcase这两个函数即可,管道中有数据传入则读取管道中的数据,管道无数据传入则读取剪贴板中的......