2012-01-27 22 views
3

Nyquistの文字列(特定の文字をxlispとよく似ています)から削除して結果を返すにはどうすればよいですか?Nyquistの文字列から文字を削除する

「ABBAAAABBBAABAAAB」のような文字列に「A」がいくつあるかをカウントしたいと思います。 (はい、唯一 'AさんとB' のの文字列にはあります。)

なし(カウント)関数は、ナイキストではありませんので、私は

(length (remove #\B mystring)) 

または

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

ような何かをしようとしたが、それは動作しません。

文字カウントを忘れてしまった場合、文字列から 'B'を削除するにはどうすればよいですか?

答えて

2

文字列には常にABがありますか?そうでない場合、あなたは、ナイキストremovestringの、唯一のlist Sを扱っていないXLISP reference for removeによると

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

ような何かをしたい場合があります。この方法で操作するには、stringlistに変換する必要がありますが、coerceもありません。それはタッチのハッキーですが、私が見る最も簡単な方法は、stringread-charです。これによりのlistが生成され、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

ことが可能であるべきです。 "エラー:不正な引数のタイプ - " ABBAABABCCCCBBCCCCAAA " 機能:#<サブレビ:#168bbe8(文字列を含む) > 引数: "ABBAABABCCCCBBCCCCAAA" \ #:TEST-NOT CHAR = 1> " –

+0

@デビッド・コスタ - あなたは' 'equal'でそれを試してみたのですか? – Inaimathi

+0

同じエラー。通訳者はミストリングが間違ったタイプだと言います。実際、例には文字列はありません。 –

関連する問題