On this page:
6.3.1 基础例程
诗?
复诗
诗->坚诗
诗长
诗提
诗修!
诗段
诗->易诗
诗修!/  以它段
诗复!
接诗
坚接诗
诗->链
链->诗
序诗
诗=?
诗<?
诗<=?
诗>?
诗>=?
诗ci=?
诗ci<?
诗ci<=?
诗ci>?
诗ci>=?
upcase诗
downcase诗
titlecase诗
foldcase诗
6.3.2 额外例程
诗接*
链合成诗
诗碎成链
诗简空
诗更
非空诗?
诗含?
诗起?
诗终?
8.6

6.3 

另可参见:字、词、参、名、料、文

“诗”(String)是一种数据结构,也就是通常所说的“字符串”。名语言用单字表示之称为“诗”。 诗有“易诗”和“坚诗”之分:
  • “易诗”(“易”在这里是“易变的,可以被改变的”的意思)是一种内容可以被修改的字符串数据结构,通常很多诗相关的例程比如复诗诗段等处理完原始数据之后的结果输出都是易诗;

  • “坚诗”与之相反,是一种内容固定不能被修改的字符串数据结构,通过半格双引号""创建出来的诗是“坚诗”。要注意的是,所谓的“不能被修改”很多时候会不容易被注意到,这是因为很多诗相关的例程在处理“坚诗”的时候,会新生成“易诗”并作为结果替换输出之,间接的完成了“坚诗”到“易诗”的转化。真正操作“诗”的原始数据并加以修改的例程都会以!结尾以表警示。

6.3.1 基础例程

Examples:
> ( #\鹅 #\鹅 #\鹅 #\, #\曲 #\项 #\向 #\天 #\歌 #\。)

"鹅鹅鹅,曲项向天歌。"

> (复诗 5 #\鹅)

"鹅鹅鹅鹅鹅"

> (诗长 "鹅鹅鹅,曲项向天歌。白毛浮绿水,红掌拨清波。")

22

> (诗提 "鹅鹅鹅,曲项向天歌。白毛浮绿水,红掌拨清波。" 0)

#\鹅

> ( ([某诗 (诗->易诗 "鹅鹅鹅,曲项向天歌。白毛浮绿水,红掌拨清波。")])
      (行示 某诗)
      (诗修! 某诗 1 #\白)
      (行示 某诗))

"鹅鹅鹅,曲项向天歌。白毛浮绿水,红掌拨清波。"

"鹅白鹅,曲项向天歌。白毛浮绿水,红掌拨清波。"

> (诗段 "鹅鹅鹅,曲项向天歌。白毛浮绿水,红掌拨清波。" 10)

"白毛浮绿水,红掌拨清波。"

> (诗段 "鹅鹅鹅,曲项向天歌。白毛浮绿水,红掌拨清波。" 10 15)

"白毛浮绿水"

> ( ([某A诗 (诗->易诗 "鹅鹅鹅,曲项向天歌。白毛浮绿水,红掌拨清波。")]
       [某B诗 "大中小白黑蓝"])
      (行示 某A诗)
      (诗修!/以它段 某A诗 0 某B诗 2 4)
      (行示 某A诗))

"鹅鹅鹅,曲项向天歌。白毛浮绿水,红掌拨清波。"

"小白鹅,曲项向天歌。白毛浮绿水,红掌拨清波。"

> ( ([某诗 (诗->易诗 "鹅鹅鹅,曲项向天歌。白毛浮绿水,红掌拨清波。")])
      (行示 某诗)
      (诗复! 某诗 #\呱)
      (行示 某诗))

"鹅鹅鹅,曲项向天歌。白毛浮绿水,红掌拨清波。"

"呱呱呱呱呱呱呱呱呱呱呱呱呱呱呱呱呱呱呱呱呱呱"

> (接诗 "鹅鹅鹅" "曲项向天歌" "白毛浮绿水" "红掌拨清波")

"鹅鹅鹅曲项向天歌白毛浮绿水红掌拨清波"

> (诗->链 "鹅鹅鹅,曲项向天歌。")

'(#\鹅 #\鹅 #\鹅 #\, #\曲 #\项 #\向 #\天 #\歌 #\。)

> (链->诗 ( #\鹅 #\鹅 #\鹅 #\, #\曲 #\项 #\向 #\天 #\歌 #\。))

"鹅鹅鹅,曲项向天歌。"

汉化

诗? :  = string?

汉化

 : 创建一个内容可变的字符串数据结构。 = string

汉化

复诗 : 创建一个内容可变的字符串数据结构,其内容为N个重复相同的字。 = make-string

汉化

诗->坚诗 : 把诗转变为坚诗。 = string->immutable-string

汉化

诗长 :  = string-length

汉化

诗提 :  = string-ref

汉化

诗修! : 将诗的第N处字(从0算起)修改为某字。 = string-set!

汉化

诗段 : 索引摘录诗的N(包含)到Q(不包含)之间的字,并生成一个易诗。 = substring

汉化

诗->易诗 : 把诗转变为易诗。 = string-copy

汉化

诗修!/以它段 : 从本诗的第N处字(从0算起)开始做覆盖(以另一个诗中取出的诗段为内容) = string-copy!

汉化

诗复! : 把诗的内容全部变成某一个重复的一个字。 = string-fill!

汉化

接诗 : 把很多诗连接在一块,组成易诗。 = string-append

汉化

坚接诗 : 把很多诗连接在一块,组成坚诗。 = string-append-immutable

汉化

诗->链 :  = string->list

汉化

链->诗 :  = list->string

汉化

序诗 : 生成一个诗,诗中的每个字都是按照一定的顺序排列的。 = build-string

汉化

诗=? :  = string=?

汉化

诗<? :  = string<?

汉化

诗<=? :  = string<=?

汉化

诗>? :  = string>?

汉化

诗>=? :  = string>=?

汉化

诗ci=? :  = string-ci=?

汉化

诗ci<? :  = string-ci<?

汉化

诗ci<=? :  = string-ci<=?

汉化

诗ci>? :  = string-ci>?

汉化

诗ci>=? :  = string-ci>=?

汉化

upcase诗 :  = string-upcase

汉化

downcase诗 :  = string-downcase

汉化

titlecase诗 :  = string-titlecase

汉化

foldcase诗 :  = string-foldcase

6.3.2 额外例程

 (require ming/racket/string) package: ming

Examples:
> (链合成诗 ( "鹅" "鹅" "鹅" "," "曲" "项" "向" "天" "歌" "。"))

"鹅 鹅 鹅 , 曲 项 向 天 歌 。"

> (链合成诗 ( "鹅" "鹅" "鹅" "," "曲" "项" "向" "天" "歌" "。") "-")

"鹅-鹅-鹅-,-曲-项-向-天-歌-。"

> (链合成诗 ( "鹅" "鹅" "鹅" "," "曲" "项" "向" "天" "歌" "。") "")

"鹅鹅鹅,曲项向天歌。"

> (诗碎成链 "鹅       \n \n 曲项向天歌 \n\r")

'("鹅" "鹅" "鹅" "曲项向天歌")

> (诗碎成链 "鹅-鹅-鹅-曲-项-向-天-歌" "-")

'("鹅" "鹅" "鹅" "曲" "项" "向" "天" "歌")

> (诗简空 "鹅         \n \n 曲项向天歌 \n\r")

"鹅 鹅 鹅 曲项向天歌"

> (诗更 "鹅鹅鹅,曲项向天歌。" "鹅鹅鹅" "小黄鸭")

"小黄鸭,曲项向天歌。"

> (诗更 "鹅鹅鹅,曲项向天歌。" "鹅鹅鹅" "")

",曲项向天歌。"

> (诗含? "鹅鹅鹅,曲项向天歌。白毛浮绿水,红掌拨清波。" "白毛浮绿水")

#t

> (诗起? "鹅鹅鹅,曲项向天歌。白毛浮绿水,红掌拨清波。" "鹅鹅鹅")

#t

> (诗终? "鹅鹅鹅,曲项向天歌。白毛浮绿水,红掌拨清波。" "拨清波。")

#t

汉化

诗接* :  = string-append*

汉化

链合成诗 : 把一个链内的各个元素聚集在一块组成易诗。 = string-join

汉化

诗碎成链 : 把诗断开成链,默认从空白处,也可自定义。 = string-split

汉化

诗简空 : 把诗内的空格回车等字符都简化成一个空格然后转变成易诗返回。 = string-normalize-spaces

汉化

诗更 : 把诗的一部分内容更换成另一个诗,然后转变成易诗返回。 = string-replace

汉化

非空诗? :  = non-empty-string?

汉化

诗含? :  = string-contains?

汉化

诗起? :  = string-prefix?

汉化

诗终? :  = string-suffix?