string->input-port
文字列を PLT スキーム (メソッドを含まない) の対応するコードに変換するにはどうすればよいですか? たとえば、次の文字列を変換したいとします。
"(1 (0) 1 (0) 0)"
このリストに:
'(1 (0) 1 (0) 0)
ファイルを開かずにこれを行うことは可能ですか?
read
スキームには、入力ポートから s 式を読み取る手順があり、文字列を で入力ストリームに変換できますstring->input-port
。したがって、文字列からSchemeオブジェクトを読み取ることができます
(read (string->input-port "(1 (0) 1 (0) 0)"))
私はSchemeをインストールしていないので、参照から読んだだけで、実際にはテストしていません。
PLT スキームのマニュアルから:
(open-input-string string [name-v])
文字列の UTF-8 エンコーディング (セクション 1.2.3 を参照) からバイトを読み取る入力ポートを作成します。オプションのname-v
引数は、返されるポートの名前として使用されます。デフォルトは です'string
。
このcomp.lang.schemeに関する同様の質問 から、文字列をファイルに保存してから読み取ることができます。
これは、次のサンプル コードのようになります。
(let ((my-port (open-output-file "Foo")))
(display "(1 (0) 1 (0) 0)" my-port)
(close-output-port my-port))
(let* ((my-port (open-input-file "Foo"))
(answer (read my-port)))
(close-input-port my-port)
answer)
多くのスキームでは、標準入力ポートであるコンテキストでwith-input-from-string str thunk
実行されます。たとえば、ギャンビット スキームでは次のようになります。thunk
str
(with-input-from-string "(foo bar)"
(lambda () (read)))
次のように評価されます。
(foo bar)
thunk
aは引数を取らない手続きでなければならないので、ラムダが必要です。