0

ユーザー入力 (読み取り行) を、より簡単に操作できるアトムのリストに変換する方法を探していました。例えば:

SendInput() これは私の入力です。うまくいけば、これはうまくいきます。

そして私は戻りたい.. (これは私の入力です。うまくいけばうまくいきます。)

最終的には、ピリオド、コンマ、引用符などを削除するのが理想的ですが、今のところ、ユーザー入力をリストに保存したいだけです(文字列としてではありません)

そう。今のところ私は使用しています

(setf stuff (coerce (read-line) 'list))

そしてそれは次のように返されます... (#\T #\h #\i #\s #\Space #\i #\s #\Space #\m #\y #\Space #\i #\n # \p #\u #\t #. #\スペース #\H #\o #\p #\e #\f #\u #\l #\l #\y #\スペース #\t #\h # \i #\s #\スペース #\w #\o #\r #\k #\s #.)

だから今、私はそのリストを取得して適切にフォーマットできる関数を探しています...どんな助けも大歓迎です!

4

2 に答える 2

5

Rainer の答えは、もう少し軽量 (かつ一般的) であるという点で優れていますが、すでにロードされている場合はCL-PPCREを使用することもできます (私はいつもそうしています)。

次のようSPLITに、から取得した文字列に直接使用できます。READ-LINE

(cl-ppcre:split "[ .]+" (read-line))

(今、あなたは2つの問題を抱えています)

于 2013-02-28T10:52:30.943 に答える
5

やりたいことは、一連の文字 (文字列) を小さな文字列または記号のリストに分割することです。

Lisp ライブラリから利用できるいくつかの分割シーケンス関数を使用します (例としてcl-utilitiesを参照してください)。

関数が付属している LispWorks では、SPLIT-SEQUENCEたとえば、次のように記述します。

CL-USER 8 > (mapcar #'intern
                    (split-sequence '(#\space #\.)
                                    "This is my input. Hopefully this works."
                                    :coalesce-separators t))
(|This| |is| |my| |input| |Hopefully| |this| |works|)

大文字と小文字を区別しない名前のシンボルを取得するには、シンボルが垂直バーで囲まれていることに注意してください。二重引用符が文字列の一部ではないのと同様に、垂直バーはシンボル名の一部ではありません。これらは区切り文字です。

印刷することもできます:

CL-USER 19 > (princ (mapcar #'intern
                            (split-sequence '(#\space #\.)
                                            "This is my input. Hopefully this works."
                                            :coalesce-separators t)))
(This is my input Hopefully this works)
(|This| |is| |my| |input| |Hopefully| |this| |works|)

上記はリストを印刷します。最初の出力はによって印刷されたデータでPRINCあり、2番目の出力はREPLによって行われます。

シンボルではなく文字列が必要な場合:

CL-USER 9 > (split-sequence '(#\space #\.)
                            "This is my input. Hopefully this works."
                            :coalesce-separators t)
("This" "is" "my" "input" "Hopefully" "this" "works")
于 2013-02-28T01:53:27.800 に答える