Sim*_*mon 0 lisp string split common-lisp
我想删除字符串末尾的一些字符.
我做了这个功能:
(defun del-delimiter-at-end (string)
(cond
((eq (delimiterp (char string (- (length string) 1))) nil)
string )
(t
(del-delimiterp-at-end (subseq string 0 (- (length string) 1))) ) ) )
Run Code Online (Sandbox Code Playgroud)
有了这个 :
(defun delimiterp (c) (position c " ,.;!?/"))
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么它不起作用.我有以下错误:
Index must be positive and not -1
Run Code Online (Sandbox Code Playgroud)
请注意,我想在字符串列表中拆分字符串,我已经在这里看了一下:
但是如果字符串的结尾是分隔符,它就不起作用,这就是我试图这样做的原因.
我究竟做错了什么?提前致谢.
只需使用string-right-trim:
(string-right-trim " ,.;!?/" s)
Run Code Online (Sandbox Code Playgroud)
如果您向您传递一个空字符串del-delimiter-at-end,您将-1作为第二个参数传递给char.
没有理由这样做(eq (delimiterp ...) nil); 只需使用(delimiterp ...)(并切换条款!)
您可以subseq递归调用,这意味着您不仅无缘无故地分配内存,您的算法也是字符串长度的二次方.