read-from-string
Common Lisp では、この目的のために関数を使用できます。
> (read-from-string "123")
123 ;
3
ご覧のとおり、主な戻り値は読み取られたオブジェクトであり、この場合はたまたま整数です。2 番目の値 (位置)は説明が難しいですが、ここでは、同じ入力を消費する読み取り関数への後続の呼び出しで次に読み取る必要がある文字列内の次の文字を示しています。
整数を読み取るためだけに調整されていないことread-from-string
は明らかです。そのために、parse-integer
関数に目を向けることができます。そのインターフェースは次のようになりread-from-string
ます。
> (parse-integer "123")
123 ;
3
への類似物を求めていたことを考えるとatoi
、parse-integer
関数はより適切な選択です。
質問の 2 番目の部分である後編集に対処すると、format
関数を使用して文字列をインターリーブ (または「散在」) させることができます。この例では、format
反復制御ディレクティブ ~{
(開始)、~}
(終了)、および~^
(残りの入力が空の場合は終了)を使用して、単一のスペース文字を区切り文字列としてハードコーディングします。
> (format nil "Interleaved: ~{~S~^ ~}." '(1 2 3))
"Interleaved: 1 2 3."
大まかに翻訳すると、フォーマット文字列は次のようになります。
入力リスト ( ) の各項目について~{
、通常の変換 ( ~S
) で項目を出力します。アイテムが残っていない場合は、反復を停止します ( ~^
)。それ以外の場合は、スペースを出力してから、次の項目 ( ) でプロセスを繰り返します~}
。
そこに単一のスペースをハードコーディングすることを避け、区切り文字列を個別に指定された値として受け入れたい場合は、いくつかの方法があります。ここでそれほどの柔軟性が必要かどうかは明らかではありません。