之前写过 SRFI 1的函数,这回来写 SRFI 13的 函数,这些函数在Racket中都是内置的, 可能名字不一样,功能基本上是相同的。

string-every

string-every 接受 2 个参数,1个函数符号f,一个字符串a。它的功能和 vl-every 是类似的, 不同之处在于,一个接受list做参数,一个接受字符串做参数。

1
2
3
(defun string-every (pred a)
  ;; 作者:徐工, 微博:@徐工徐工2020,头条:@徐工徐工 
  (vl-every pred (string-explode a)))

string-any

string-any 接受 2 个参数,1个函数符号f,一个字符串a。它的功能和 vl-some 是类似的, 不同之处在于,一个接受list做参数,一个接受字符串做参数。

1
2
3
(defun string-any (pred a)
  ;; 作者:徐工, 微博:@徐工徐工2020,头条:@徐工徐工 
  (vl-some pred (string-explode a)))

string-concatenate

string-concatenate 函数接受1个list,这个list的元素是字符串。 它的功能就是把list的这些元素合并为1个字符串。

1
2
3
(defun string-concatenate (strings)
  ;; 作者:徐工, 微博:@徐工徐工2020,头条:@徐工徐工  
  (apply 'strcat strings))

make-string

make-string 接受2个参数,1个整数n,1个字符串a。它把输入的字符串重复n次, 返回这个重复了n次的新字符串。有点儿类似于make-list函数。

1
2
3
(defun make-string (len a)
  ;; 作者:徐工, 微博:@徐工徐工2020,头条:@徐工徐工  
  (string-concatenate (make-list len a)))

string-tabulate

string-tabulate 函数 与 list-tabulate 函数类似,区别在于一个是返回list, 一个返回一个字符串。

1
2
3
(defun string-tabulate (len func) 
  ;; 作者:徐工, 微博:@徐工徐工2020,头条:@徐工徐工  
  (string-concatenate (mapcar func (iota len 0 1))))

后记

SRFI 13 是一个关于字符串操作的函数库,还要很多个函数,这次就写这么多,其他的以后再写。