Удаление символов из строки в Nyquist

Как я могу удалить определенный символ из строки в Nyquist (который очень похож на xlisp) и вернуть результат?

Я хочу посчитать, сколько "A" есть в строке типа "ABBAAAABBBAABAAAB". (Да, в строке есть только "А" и "В".)

Так как в Nyquist нет функции (count), я попробовал что-то вроде

(length (remove #\B mystring))

или же

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

Но это не работает.

Забыв на мгновение количество символов, как я могу удалить буквы "B" из строки?

1 ответ

Решение

Всегда будет только Aс и Bв строке? Если нет, вы можете сделать что-то вроде

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

Согласно справке XLISP дляremoveНайквист remove не имеет дело с stringтолько lists. Вам нужно конвертировать string к list чтобы оперировать таким образом, но нет coerce или. Это хакерское прикосновение, но я вижу, что проще всего обойти это string а также read-char Это. Это произведет list из charс которыми вы можете манипулировать remove,

(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"
Другие вопросы по тегам