从Nyquist中删除字符串中的字符

时间:2012-01-27 20:47:43

标签: lisp audacity nyquist

如何从Nyquist中的字符串中删除某个字符(与xlisp非常相似)并返回结果?

我想计算像“ABBAAAABBBAABAAAB”这样的字符串中有多少“A”。 (是的,字符串中只有'A'和'B'。)

由于奈奎斯特没有(计数)功能,我尝试了类似

的功能
(length (remove #\B mystring))

(length (remove #\B mystring :test equal))

但它不起作用。

暂时忘记字符数,如何从字符串中删除'B'?

2 个答案:

答案 0 :(得分:2)

字符串中是否只有AB s?如果没有,您可能想要做类似

的事情
(remove #\A yourstring :test-not 'char=)

根据XLISP reference for remove,奈奎斯特remove不处理string s,只处理list s。您需要将string转换为list才能以这种方式对其进行操作,但也没有coerce。这是一个触摸hacky,但我看到最简单的方法是流stringread-char它。这将生成list charremove,然后您可以使用(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=)

现在应该可以

{{1}}

答案 1 :(得分:1)

我看到这是一个古老的问题,但是由于它具有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"