关于 srfi 13的函数实现,之前写过几篇blog,已经实现了不少的函数。 不过,srfi 13 的函数实在是太多了,因为它的目的是解决scheme代码移植性问题, 所以,函数的数量自然是不会少的。

这次,再用autolisp实现几个函数,时间有限,只能蚂蚁搬家,没法一次性搞定全部实现。

string-explode

这个函数在srfi 13里边的名称是string->list,由于vl-string->list的存在, 咱们就把它叫做string-explode吧。对了,Racket里边对应的函数用的也叫做string-explode

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

string-take

这个函数的功能,跟take函数几乎一模一样,区别只在于用作list还是字符串。

1
2
3
(defun string-take (n a)
  ;; 作者:徐工, 微博:@徐工徐工2020,头条:@徐工徐工
  (substr a 1 n))

string-take-right

这个函数的功能,跟take-right函数几乎一模一样,区别只在于用作list还是字符串。

1
2
3
(defun string-take-right (n a)
  ;; 作者:徐工, 微博:@徐工徐工2020,头条:@徐工徐工
  (substr a (if (>= n (strlen a)) 1 (1+ (- (strlen a) n)))))

string-drop

这个函数的功能,跟drop函数几乎一模一样,区别只在于用作list还是字符串。

1
2
3
(defun string-drop (n a)
  ;; 作者:徐工, 微博:@徐工徐工2020,头条:@徐工徐工
  (substr a (1+ n)))

string-drop-right

这个函数的功能,跟drop-right函数几乎一模一样,区别只在于用作list还是字符串。

1
2
3
(defun string-drop-right (n a)
  ;; 作者:徐工, 微博:@徐工徐工2020,头条:@徐工徐工
  (substr a 1 (if (>= n (strlen a)) 0 (- (strlen a) n))))

后记

函数式编程的世界是由函数组成的,这个说法不一定严谨,但是,主观感受上基本如此。 由于这个特性,使用函数式编程范式的编程语言,编写各种各样长短不一的函数基本是工作的全部, 也是乐趣之一,别因为函数太短而懒得去写。