Lisp.字符串和字符

字符串是字符的向量。我们把常量字符串看成是一系列被双引号包括的字符,一个单独的字符c被表示为#\c。


通常(但不是必须的),每个字符都会有一个相关的整数,这个整数就是ASCII码。在多数的实现中,函数char-code返回与一个字符相关的数字,code-char返回对应数字的字符。


函数char<(小于),char<= (小于等于),char=(等于equal), char>=(大于等于),char>(大于)和char/=(不同)用来比较字符。它们像数字比较符号一样工作。

[15]> (sort "elbow" #'char<)
"below"

因为字符串是向量,序列函数和数组函数也可以作用于字符串。你可以使用aref来获取元素,比如:

[16]> (aref "abc" 1)
#\b

但是你可以对字符串使用更加快速的char函数:

[17]> (char "abc" 1)
#\b

你可以组合使用setf和char(或者aref)来替换元素:

[19]> (let ((str (copy-seq "Merlin"))) (setf (char str 3) #\k) str)
"Merkin"

如果你想要比较两个字符串,你可以使用通用的equal,但是也有一个叫做string-equal的函数,这个函数会忽略大小写:

[20]> (equal "fred" "fred")
T
[21]> (equal "fred" "Fred")
NIL
[22]> (string-equal "fred" "Fred")
T

Common Lisp提供了大量的比较和操作字符串的函数。有几种方式来创建字符串。最通用的方式是使用format函数。调用format时,把nil作为第一个参数,将会使它作为一个字符串返回,也就是即将要打印出的哪个字符串:

[23]> (format nil "~A or ~A" "truth" "dare")
"truth or dare"

 但是如果你仅仅时想将多个字符串结合在一起,你可以使用concatenate函数,它接受一个符号,这个符号用来指定结果的类型,加上一个或者多个序列:

[26]> (concatenate 'string "not " "to worry")
"not to worry"


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值