Удаление символов из строки в 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
только list
s. Вам нужно конвертировать 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"