srfi-152srfi-13的精简版。

之所以专门弄个精简版,简单来说,就是剔除用不上的废弃函数。

要说的详细一点的话,就要从srfi讲起。srfi是对scheme标准的补充。 srfi-13出现的时候,scheme标准规定的string函数很少,到了srfi-152出现的时候, scheme标准、各种常见的scheme实现都增加了不少的string函数,因此,就有了srfi-152

不过,虽然srfi-152号称是精简版,srfi库一贯注重的可移植性还是保留了下来, 为了达到可移植性,他们又在srfi-13的基础上新增了几个函数。😂

这次把新增的几个函数用autolisp实现一下,印象中,这几个函数在racket中好像还没有内置。

string-take-while

string-take-while 是专门操作string的 take-while

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

string-take-while-right

string-take-while-right 是从字符串右边到左边执行的 string-take-while

1
2
3
(defun string-take-while-right (a pred) 
  ;; 作者:徐工, 微博:@徐工徐工2020,头条:@徐工徐工
  (string-concatenate (reverse (take-while pred (reverse (string-explode a))))))

string-drop-while

string-drop-while 是专门操作string的 drop-while

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

string-drop-while-right

string-drop-while-right 是从字符串右边到左边执行的 string-drop-while

1
2
3
(defun string-drop-while-right (a pred) 
  ;; 作者:徐工, 微博:@徐工徐工2020,头条:@徐工徐工
  (string-concatenate (reverse (drop-while pred (reverse (string-explode a))))))

string-span

string-span 是专门操作string的 span

1
2
3
(defun string-take-while (a pred) 
  ;; 作者:徐工, 微博:@徐工徐工2020,头条:@徐工徐工
  (mapcar 'string-concatenate (span pred (string-explode a))))

string-break

string-break 是专门操作string的 break

1
2
3
(defun string-drop-while (a pred) 
  ;; 作者:徐工, 微博:@徐工徐工2020,头条:@徐工徐工
  (mapcar 'string-concatenate (break pred (string-explode a))))

基础函数

这里用到的几个基础函数,比如take-while/ drop-while / span / break都是先前已经用autolisp实现过的srfi-1的库函数,有兴趣的可以访问链接一窥究竟。