在LispWorks中进行编程09:字符串
Category:UI界面编写字符串
到目前为止,我们已经了解了以下类型的Lisp对象:
- 数字,如2,4和17。
- 过程名称,如+和列表
- 列表,如(1 2 3 4)和(+ 3 6)。
我们还了解到Lisp使用数据和程序列表。第一个列表(1 2 3 4)是数据,因为1不是过程的名称。第二个列表(+ 3 6)是一个添加3和6的过程调用(或者它可能是恰好看起来像过程调用的数据)。
字符串
新类型是一个字符串:用双引号括起来的任何字符序列。所以这里有四个字符串:
“cat”
“dog”
“Once upon a time there was a prince”
“”
最后一个是空字符串,它不包含任何字符,但它仍然是一个有效且有用的字符串。您可以在字符串中包含双引号,前缀为反斜杠:
“He shouted \”Help!\” and ran away.”
现在一些使用字符串的过程(请注意,其中大多数也适用于列表):
查找字符串的长度:length
我们已经满足了列表的长度。它也可以用来查找字符串的长度; 例如:
CL-USER > (length “Lisp”)
4
反转字符串:反向
反向过程也适用于字符串:
CL-USER > (reverse “dog”)
“god”
将两个(或更多)字符串连接在一起:连接
第二个参数必须是’字符串告诉程序你连接的是什么类型的东西:
CL-USER > (concatenate ‘string “band” “age”)”bandage”
该连击过程可能需要串任意数量的,他们都将被连接成一个长字符串。
从字符串中获取子序列:subseq
此过程提取字符串的一部分。它需要三个参数:
- 字符串
- 你想要的第一个字符的编号
- 您想要的最后一个字符后面的字符数
字符从0开始计算。例如:
CL-USER > (subseq “averylongword” 5 9)
“long”
如果省略第三个参数,则将字符串的其余部分放到最后。
使用字符串编写过程
现在我们准备使用字符串编写一个过程。我们来写一个简单的小猪程序。它取出单词的第一个字母,将其与第一个字母删除的单词连接起来,并在结尾添加“ay”:
(defun piglatin (word)
(concatenate ‘string (subseq word 1) (subseq word 0 1) “ay”))
试试看:
CL-USER 16 : 2 > (piglatin “pig”)
“igpay”
请注意,它不能完美地工作。尝试:
(piglatin “ant”)
稍后您将了解if构造,它将使您能够完美地发挥作用的letlatin功能。
演习
1.翻转单词的中间字母
将一个过程写入正中以反转除一个单词的第一个和最后一个字母以外的所有字母。例如:
(midverse “retinues”)
成为“团聚”。检查一下
(midverse (midverse word))
保持不变。
2. 将字符串向左旋转n个位置
编写一个旋转的过程,将字符串向左旋转n个字符。所以,例如:
(rotate “mousetrap” 5)
应该给:
“trapmouse”
http://mip.i3geek.com