Skill语言一些常见函数(二)

news/2026/1/11 4:51:04/文章来源:https://www.cnblogs.com/NoName555/p/19447518

1.list():用来创建一个List数据类型的变量,也可用单引号'。例如:
aList='(1 2 a b c)
bList=list(1 2 'a 'b 'c)
cList='(1 (2 a b) c)
注:当有字符出现的时候,用list函数创建必须在字符前加单引号。

2.car():
用来读取List中的第一个元素。例如:
car('(a b c))
=>a

3.cdr():
用来读取list中除了第一个元素外后面的单元。例如:
cdr('(a b c))
=>(b c)
此外,可以对List重复混合使用car或cdr函数,组合的格式为以c开头,r结尾,中间可有多个a|d。例如:
caadr功能等同于car(car(cdr(List))),caadr()函数对List的操作顺序为:
(1)先执行一次cdr,读取后面的单元;
(2)对第一步读取的值执行car,读取其第一元素;
(2)对第二步读取的值执行car,读取其第一元素。
caadr('((1 2 3) (4 5 6) (7 8 9)))
=>4

4.nthelem():
按元素序号读取List中的元素。用法:
nthelem(1 1_list)等同于car(1_list)

5.last():
用来读取List中的最后一个元素。其数据类型也是一个List。用法:
last(listname)

6.rplaca():
用来替换List中的第一个元素。例如:
aList='(1 2 3)
bList=rplaca(aList 4)
aList
=>(4 2 3)
eq(aList bList)
=>t
同理用rplacd()函数可以替换List后面的单元。

7.cons():
用来添加元素到List之前。例如:
aList='(2 3 4)
cons(1 aList)
=>(1 2 3 4)
此外,xcons()函数和cons()函数功能一样,只是格式有所区别,前面的变量为原List的元素,后面的变量为需要添加的元素。例如:
xcons('(b c) 'a)
=>(a b c)

8.append1():
用来添加元素到List之后。例如:
append1('(1 2 3) 4)
=>(1 2 3 4)

9.append()与nconc():
两个函数都是用来合并两个List。前者不改变所合并的List变量的值;后者会改变所合并List的值,且依次累加,最后一个List值不变。例如:
cList='(1 2) dList='(3 4 5) eList='(6 7)
append(cList dList)
=>(1 2 3 4 5)
cList
=>(1 2)
dList
=>(3 4 5)
nconc(cList dList eList)
=>(1 2 3 4 5 6 7)
cList
=>(1 2 3 4 5 6 7)
dList
=>(3 4 5 6 7)
eList
=>(6 7)

10.reverse():
用于元素倒序排序。例如:
aList='(1 2 3)
reverse(aList)
=>(3 2 1)
bList='(1 2 (3 4 5) 6)
reverse(bList)
=>(6 (3 4 5) 2 1)
bList
=>(1 2 (3 4 5) 6)

11.sort():
用于元素按条件排序。书写格式为:
sort(1_data u_comparefn)
其中第一个变量“1_data”为List的变量,第二个变量“u_comparefn”为对比函数。对比函数也可以是自定义函数。例如:
sort('(4 3 2 1) 'lessp)
=>(1 2 3 4)
sort('(d b c a) 'alphalessp)
=>(a b c d)
sort('("U5" "U10" "U1" "U5" "U2") 'axlStrcmpAlpNum)
=>("U1" "U2" "U5" "U5" "U10") (其中“axlStrcmpAlpNum”为自定义函数)
此外,当List元素都是由List组成的时候,可以使用sortcar()函数来对比子List的第一个元素排序。例如:
sortcar('((4 four) (3 three) (2 two)) 'lessp)
=>((2 two) (3 three) (4 four))
sortcar('((d 4) (b 2) (c 3) (a 1)) 'nil)
=>((a 1) (b 2) (c 3) (d 4))

12.member()与assoc():
member()函数是一种用于查找List元素的函数。它从List的第一个元素开始查找,找到并返回第一个元素后继续找,一直到最后。如果能找到,返回从找到的元素开始直到最后的元素,找不到则返回nil。因此可以用来判断元素是否存在。例如:
member(3 '(2 3 4 3 5))
=>(3 4 3 5)
member(6 '(2 3 4 3 5))
=>nil
assoc()函数也是一种用于查找List元素的函数,其书写格式为:
assoc(g_key l_alist)
其中“g_key”变量为所查找的第一个完整的关键值,“l_alist”是个由多个List组成的List,格式为:((key1 value1) (key2 value2) (key3 value3)......)。
assoc()函数返回的是查找到的子List。例如:
aList='((1 "one") (2 "two") (3 "three"))
assoc(2 aList)
=>(2 "two")
assoc("one" aList)
=>nil

13.setof()、exists()与forall():
这三种函数都是用于过滤List元素的函数。
setof()函数的书写格式为:
setof(s_formalVar l_valueList g_predicateExpression)。
其中“s_formalVar”变量为局部变量,作用于“g_predicateExpression”表达式中,“l_valueList”变量为要过滤的List变量,“g_predicateExpression”为自定义表达式。例如:
setof(x '(1 2 3 4) (x>2))
=>(3 4)
setof(x '(1 2 3 4 5 6) oddp(x))
=>(1 3 5) (oddp()函数是将一个不是奇数的数值舍入为最接近的奇数)
exists()函数和setof()函数的区别在于exists()函数查找List中满足条件的第一个元素,并返回之后的所有元素。例如:
exists(x '(4 3 4 5) (x<4))
=>(3 4 5)
forall()函数用于判断List中所有的元素是否全部满足表达式,全满足返回t,否则返回nil。例如:
forall(x '(1 2 3 4) (x>0))
=>t
forall(x '(2 4 7 8) evenp(x))
=>nil (evenp()函数是返回沿绝对值增大方向取整后最接近的偶数)

14.remove():
用来移除List中所指定的元素。如果List中没有所指定的元素,则返回原List。remove()函数不会改变原List变量的值。例如:
aList='(1 2 3 4 5)
remove(3 aList)
=>(1 2 4 5)
aList
=>(1 2 3 4 5)

15.foreach():

最常用的遍历函数。只能依次取得List中的元素,不能改变List中原先储存的元素。例如:

foreach(x '(1 2 3 4) print(x))

=>1234

foreach((x y) '(1 2 3) '(4 5 6) (println x+y))

=>5

 79

foreach(x '(1 2 3) (print plus(x 2)))

=>345

16.mapcar():

连续依次操作List集合中每个子List的元素,首先把每个List中的第一个元素当作function的形参,然后是每个List的第二个元素,一直到最短的List的最后一个元素。剩下的元素将被忽略。它的结果是返回一个List集合的元素依次应用于function的结果。例如:

mapcar('plus '(1 2 3) '(8 7 6))

=>(9 9 9)

mapcar('list '(a b c) '(1 2 3) '(x y z))

=>((a 1 x) (b 2 y) (c 3 z))

mapcar('lambda((x) plus(x 1)) '(2 4 6))

=>(3 5 7) (“lambda”为匿名函数)

拓展:

mapc()函数与mapcar()函数类似,只是返回的是参数的第一个List,并没有聚集的结果,故它比mapcar()函数快。例如:

mapc('lambda((x) plus(x 1)) '(2 4 6))

=>(2 4 6)

map()函数对遍历处理每一个子List很有用,它用的是cdr()函数的方式,忽略每次运行的结果,返回原始的List。例如:

map('list '(1 2 3) '(9 8 7))

=>(1 2 3)

17.maplist():

和mapcar()函数类似,不过maplist()函数是首先将函数apply到每个List参数下。即函数首先应用于整个List,然后将函数应用到每个List的cdr,再将函数应用到每个List的cddr,一直到最短的一个List为空为止。例如:

maplist('length '(1 2 3))

=>(3 2 1) (length()函数用于计算一个list或者array的长度)

maplist('list '(a b c) '(1 2 3))

=>(((a b c) (1 2 3)) ((b c) (2 3)) ((c) (3)))

此外还有mapl()函数。mapl对于maplist正如mapc对应于mapcar。

18.mapcan():

遍历收集每次运行的结果存放在一个新的List中,可用于List的重组。例如:

mapcan('list '(1 2 3) '(a b c))

=>(1 a 2 b 3 c)

foreach(mapcan x '((1 2) (3 4 5) (6 7)) x)

=>(1 2 3 4 5 6 7)

19.when()与unless():

两者都是单分支函数。用法:

when(bCondition) ; bCondition为逻辑表达式、nil或其它(真值)。当bCondition为真时执行when里的命令。

unless(bCondition) ; bCondition为假时执行when里的命令。

即when==(!unless)。

20.if():

双分支函数。用法:

if(bCondition then exp1 else exp2) ; bCondition为真时执行exp1,为假时执行exp2。

21.cond()与case():

多分支函数。区别:

cond()函数里有多个程序块,程序会逐个判断各模块里面的程序,然后退出块的条件,直到找到一个逻辑为真的块,执行cond。cond就像是if then else的多次叠加。

case()函数里也有多个程序块,程序会判断case条件的程序块,后面哪个表达式满足其中的条件,只执行满足的那个。

cond和case的区别在于cond中的判断表达式可以不唯一,而case只判断一个表达式。意为:

cond( ((a>1) ...) ((a=1) ...) ((a<1) ...) )

b=1 (case(0 ...) case(1 ...) case(2 ...))

22.while()与for():

两者都为循环控制函数。用法:

while(bCondition expressions) ; bCondition为非nil时一直重复执行while里面的命令行。

for(nStep 1 10) ; for命令的索引只可以递增,不像C语言那样支持递减。

23.prog()与let():

两者都是定义局部变量的函数。两者语法格式一样。不同的是prog要带一个return返回值,而let不需要。单单使用局部变量的功能,那么let的效率要比prog高。如果要从一个for循环里跳出,采用下面方法是不行的,Skill不支持:

for(nNum 1 20

when(nNum>10return(nNum))

)

必须要在for之前加一个prog,如下:

prog( ()

for(nNum 1 20

when(nNum>10return(nNum))

))

=>11

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1118687.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

突破3大驱动管理瓶颈:DriverStore Explorer让Windows性能飙升

突破3大驱动管理瓶颈&#xff1a;DriverStore Explorer让Windows性能飙升 【免费下载链接】DriverStoreExplorer Driver Store Explorer [RAPR] 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否经常遇到系统盘空间告急、设备频繁冲突或驱动更新…

如何高效使用Zotero插件:文献管理效率提升终极指南

如何高效使用Zotero插件&#xff1a;文献管理效率提升终极指南 【免费下载链接】zotero-style zotero-style - 一个 Zotero 插件&#xff0c;提供了一系列功能来增强 Zotero 的用户体验&#xff0c;如阅读进度可视化和标签管理&#xff0c;适合研究人员和学者。 项目地址: ht…

数据清洗脚本编写:VibeThinker处理缺失值与异常点

数据清洗脚本编写&#xff1a;VibeThinker处理缺失值与异常点 在数据科学的实际工作中&#xff0c;一个令人头疼的现实是——真正决定模型成败的往往不是算法本身&#xff0c;而是数据的质量。哪怕是最先进的深度学习架构&#xff0c;面对满是缺失值、异常点和格式混乱的数据集…

楼宇运维通信基础:机房基础建设稳定性标准规范

设备稳定性&#xff1a;机房核心节点的可靠基石设备是机房的核心节点&#xff0c;其稳定性直接决定通信系统的运行状态。选型阶段需遵循冗余设计原则&#xff0c;关键设备如核心交换机、服务器应采用双电源、双主控模块配置&#xff0c;例如某品牌核心交换机支持热插拔电源模块…

Equalizer APO终极指南:从零掌握专业音频均衡技术

Equalizer APO终极指南&#xff1a;从零掌握专业音频均衡技术 【免费下载链接】equalizerapo Equalizer APO mirror 项目地址: https://gitcode.com/gh_mirrors/eq/equalizerapo Equalizer APO是一款专为Windows系统设计的高级参数化均衡器&#xff0c;作为音频处理对象…

音效爱好者聚集地!这些社区不仅免费还能交流创作心得

在一个优秀的音效社区&#xff0c;你下载的不只是声音文件&#xff0c;更是一份来自全球创作者的灵感、一份共同成长的热情&#xff0c;以及一个随时可以提问的智囊团。你是否已经不再满足于在商业素材库里机械地搜索下载&#xff0c;而是渴望找到一群志同道合的伙伴&#xff0…

楼宇运维核心设备管理标准:GPON机柜、UPS与动环设备的开放系统

引言楼宇运维的稳定性直接取决于核心设备的规范管理&#xff0c;GPON机柜主设备、UPS、动环设备作为基础支撑体系&#xff0c;其管理标准的科学性与执行力度&#xff0c;直接影响办公、安防、通信等各类业务的持续运行。在开放系统需求日益增长的背景下&#xff0c;核心设备的管…

云中e百货二手旧物商城购物分享系统微信小程序设计与实现

目录研究背景与意义系统设计核心功能技术创新点应用价值与测试结果项目技术支持论文大纲核心代码部分展示可定制开发之亮点部门介绍结论源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作研究背景与意义 随着环保意识增强和循环经济理念普及&…

2026年义乌租车公司推荐:五家优质企业综合实力测评 - 呼呼拉呼

2026年义乌租车公司推荐:五家优质企业综合实力测评 随着义乌商贸经济的持续繁荣和旅游业的快速发展,租车需求日益多元化,然而市场上租车公司数量众多,服务质量参差不齐,用户常面临车型选择少、手续繁琐、隐性收费…

番茄小说下载器终极指南:3分钟学会下载任意小说

番茄小说下载器终极指南&#xff1a;3分钟学会下载任意小说 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 想要将番茄小说平台上精彩的故事永久保存到本地吗&#xff1f;番茄…

年底了,测试团队该如何做总结呢

作者测试工作有一定的年限了,带大大小小的测试团队基本上也有10多年了,每到这个时候,都逃不掉做年度总结和明年规划,这里把我的一些小经验总结分享给大家,各个公司可能会有差异,大家求同存异吧。 总结的核心原则…

游戏开发必备!车辆启动音效支持多角度录制

当你听到的不是一个孤立的汽车轰鸣&#xff0c;而是随着视角与油门变化、层次分明的声浪组合时&#xff0c;虚拟驾驶的沉浸感才真正建立起来。你是否正在开发一款赛车游戏、模拟驾驶应用&#xff0c;或者为开放世界游戏打造交通系统&#xff0c;却苦于找不到高品质、有深度的车…

NBTExplorer完全指南:解锁Minecraft数据编辑的无限可能

NBTExplorer完全指南&#xff1a;解锁Minecraft数据编辑的无限可能 【免费下载链接】NBTExplorer A graphical NBT editor for all Minecraft NBT data sources 项目地址: https://gitcode.com/gh_mirrors/nb/NBTExplorer 想要深度定制你的Minecraft世界吗&#xff1f;N…

Jasminum中文文献管理插件:学术研究的终极效率工具

Jasminum中文文献管理插件&#xff1a;学术研究的终极效率工具 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件&#xff0c;用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 在繁重的学术研究工…

罗技鼠标宏压枪脚本5分钟快速上手:新手也能轻松掌握的终极配置方案

罗技鼠标宏压枪脚本5分钟快速上手&#xff1a;新手也能轻松掌握的终极配置方案 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 还在为绝地求生中…

OneMore插件终极指南:快速实现OneNote智能目录自动置顶

OneMore插件终极指南&#xff1a;快速实现OneNote智能目录自动置顶 【免费下载链接】OneMore A OneNote add-in with simple, yet powerful and useful features 项目地址: https://gitcode.com/gh_mirrors/on/OneMore 还在为OneNote长文档导航发愁吗&#xff1f;OneMor…

云南名族医药深度玩法旅游景点酒店交通住宿系统 小程序功能多

目录云南民族医药深度旅游小程序功能摘要项目技术支持论文大纲核心代码部分展示可定制开发之亮点部门介绍结论源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作云南民族医药深度旅游小程序功能摘要 民族医药文化体验 小程序整合云南白族、傣…

iOS深度定制指南:解锁设备个性化新维度

iOS深度定制指南&#xff1a;解锁设备个性化新维度 【免费下载链接】CowabungaLite iOS 15 Customization Toolbox 项目地址: https://gitcode.com/gh_mirrors/co/CowabungaLite 在iOS设备日益同质化的今天&#xff0c;如何让你的iPhone在众多设备中脱颖而出&#xff1f…

系统加速神器:一键显卡驱动清理终极指南

系统加速神器&#xff1a;一键显卡驱动清理终极指南 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drivers-uninstaller 显卡驱动…

直链提取逻辑太绕?网盘助手核心算法由VibeThinker拆解

直链提取逻辑太绕&#xff1f;网盘助手核心算法由VibeThinker拆解 在智能工具日益普及的今天&#xff0c;一个看似简单的问题却常常卡住大量用户&#xff1a;如何从某个网盘页面获取真实的文件下载链接&#xff1f;点击“下载”按钮后跳转再跳转&#xff0c;最终却只能得到一个…