2012-01-27 3 views
3

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

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

Поскольку нет функции (количество) в Найквиста я пытался что-то вроде

(length (remove #\B mystring)) 

или

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

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

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

ответ

2

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

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

Согласно XLISP reference for remove найквистовский remove не занимается string с, только list с. Вам необходимо преобразовать string в list, чтобы работать на нем таким образом, но нет coerce. Это прикосновение хаки, но самый простой способ, который я вижу, это поток string и read-char. Это создаст listchar s, после чего вы сможете манипулировать 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=) 
+0

Unluckily он не работает. "(setf yourstring" ABBAABABCCCCCCBBCCCCAAA ") (печать (\ # \ A yourstring: test-not 'char =))" приводит к ошибке ": неправильный тип аргумента -" ABBAABABCCCCCCBBCCCCAAA " Функция: # Аргументы: # \ A "ABBAABABCCCCBBCCCCAAA" : ТЕСТ-НЕ CHAR = 1> " –

+0

@David Costa - вы пытались его' 'equal'? – Inaimathi

+0

Такая же ошибка. Интерпретатор говорит, что мистика неправильного типа. И в действительности в примерах нет строк. –

Смежные вопросы