SRFI 13scheme 的标准的一种补充,包括 Racket 在内的scheme实现(变种、方言), 通常都会支持大部分的 SRFI。SRFI 13 是关于 string 的,它提供了几十个常用的函数, 这些函数绝大部分都是受 Racket 支持的。相比之下,AutoLISP的string函数就少多了。

这次再用AutoLISP实现几个 SRFI 13 函数。

string-ci=?

string-ci=?string=? 的 变种,cicase insensitive,也就是不区分大小写。

1
2
3
(defun string-ci=? (a b) 
  ;; 作者:徐工, 微博:@徐工徐工2020,头条:@徐工徐工
  (= (strcase a) (strcase b)))

string-reverse

string-reversereverse 功能是类似的,后者是把list掉个个儿,前者则是把string掉个个儿。

1
2
3
(defun string-reverse (a) 
  ;; 作者:徐工, 微博:@徐工徐工2020,头条:@徐工徐工
  (vl-list->string (reverse (vl-string->list a))))

string-pad-right

pad 这个单词有很多种意思,它在 string-pad-right 这个函数里边的意思是补白、留白, 如果了解CSS的话,会觉得这个东西比较好理解,因为,它跟CSS里边的padding是一回事。

1
2
3
4
5
6
7
8
9
(defun string-pad-right (a len / n) 
  ;; 作者:徐工, 微博:@徐工徐工2020,头条:@徐工徐工
  (setq n (- (strlen a) len))
  (cond 
    ((zerop n) a)
    ((< 0 n)
     (substr a 1 len))
    (t
     (strcat a (make-string (abs n) " ")))))

string-pad

string-pad 是给左边边留白。

1
2
3
(defun string-pad (a len) 
  ;; 作者:徐工, 微博:@徐工徐工2020,头条:@徐工徐工
  (string-reverse (string-pad-right (string-reverse a) len)))

string-map

string-map 是 string 版的 mapcar

1
2
3
(defun string-map (func a)  
  ;; 作者:徐工, 微博:@徐工徐工2020,头条:@徐工徐工
  (string-concatenate (mapcar func (string-explode a))))