Удаление символов из строки в Nyquist - PullRequest
3 голосов
/ 28 января 2012

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

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

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

(length (remove #\B mystring))

или

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

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

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

1 Ответ

2 голосов
/ 28 января 2012

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

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

Согласно справке XLISP для remove, Nyquist remove не работает с string с,только list с.Вам нужно преобразовать 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=)
.
...