Lisp 从Nyquist中的字符串中删除字符
如何从Nyquist(非常类似于xlisp)中的字符串中删除某个字符并返回结果 我想数一数像“abbaaabbbaaab”这样的字符串中有多少个“A”。(是的,字符串中只有“A”和“B”。) 因为Nyquist中没有(count)函数,所以我尝试了以下方法Lisp 从Nyquist中的字符串中删除字符,lisp,audacity,nyquist,Lisp,Audacity,Nyquist,如何从Nyquist(非常类似于xlisp)中的字符串中删除某个字符并返回结果 我想数一数像“abbaaabbbaaab”这样的字符串中有多少个“A”。(是的,字符串中只有“A”和“B”。) 因为Nyquist中没有(count)函数,所以我尝试了以下方法 (length (remove #\B mystring)) (remove #\A yourstring :test-not 'char=) 或 但它不起作用 暂时忘记字符计数,如何从字符串中删除“B”?字符串中是否总是只有as和Bs?
(length (remove #\B mystring))
(remove #\A yourstring :test-not 'char=)
或
但它不起作用
暂时忘记字符计数,如何从字符串中删除“B”?字符串中是否总是只有
a
s和B
s?如果没有,你可能想做一些类似的事情
(length (remove #\B mystring))
(remove #\A yourstring :test-not 'char=)
根据,Nyquistremove
不处理字符串
s,只处理列表
s。您需要将字符串
转换为列表
,以便以这种方式对其进行操作,但也没有强制
。这是一个简单的方法,但是我看到最简单的方法是流式传输字符串和读取字符它。这将生成一个列表
,其中包含字符
s,然后您可以使用删除
对其进行操作
(defun string->list (a-string)
(let ((collector nil)
(stream (make-string-input-stream a-string)))
(dotimes (c (length a-string) (reverse collector))
(setf collector (cons (read-char stream) collector)))))
现在应该可以
(remove #\A (string->list yourstring) :test-not 'char=)
我知道这是一个老问题,但既然它有800多个视图,也许有一个简单的答案是值得的:
(defun remove-char (character sequence)
(let ((out ""))
(dotimes (i (length sequence) out)
(setf ch (char sequence i))
(unless (char= ch character)
(setf out (format nil "~a~a" out ch))))))
(setf mystring "ABBAABABCCCCBBCCCCAAA")
(remove-char #\B mystring) ;returns "AAAACCCCCCCCAAA"
不幸的是,它不起作用。“(setf yourstring“abbababcccbbccaaa”)(print(remove#\A yourstring:test not'char=)”会导致“错误:错误的参数类型-“abbabababcccccaaa”函数:#参数:#\A“abbabababcccbbccaaa”:test-not char=1>”@David Costa-是否使用'equal
尝试过相同的错误。解释器说mystring的类型不对。事实上,在这些例子中没有任何字符串。@David Costa-Hm。很好的观点;我已经在CommonLisp中测试过了(顺便说一句,你的原创作品很好)。如果错误与mystring
的类型有关,则可能是字符串的表示方式与XLISP中的标准序列不同。是否有一个强制
函数或类似的函数可用于将字符串
转换为字符
列表?显然,引用中没有强制函数。