9

string->input-port文字列を PLT スキーム (メソッドを含まない) の対応するコードに変換するにはどうすればよいですか? たとえば、次の文字列を変換したいとします。

"(1 (0) 1 (0) 0)"

このリストに:

'(1 (0) 1 (0) 0)

ファイルを開かずにこれを行うことは可能ですか?

4

4 に答える 4

10

readスキームには、入力ポートから s 式を読み取る手順があり、文字列を で入力ストリームに変換できますstring->input-port。したがって、文字列からSchemeオブジェクトを読み取ることができます

(read (string->input-port "(1 (0) 1 (0) 0)"))

私はSchemeをインストールしていないので、参照から読んだだけで、実際にはテストしていません。

于 2008-11-25T21:55:37.527 に答える
5

PLT スキームのマニュアルから:

(open-input-string string [name-v])文字列の UTF-8 エンコーディング (セクション 1.2.3 を参照) からバイトを読み取る入力ポートを作成します。オプションのname-v引数は、返されるポートの名前として使用されます。デフォルトは です'string

于 2008-11-26T11:57:36.530 に答える
2

この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)
于 2008-11-25T21:41:59.147 に答える
1

多くのスキームでは、標準入力ポートであるコンテキストでwith-input-from-string str thunk実行されます。たとえば、ギャンビット スキームでは次のようになります。thunkstr

(with-input-from-string "(foo bar)" (lambda () (read)))

次のように評価されます。

(foo bar)

thunkaは引数を取らない手続きでなければならないので、ラムダが必要です。

于 2008-11-26T12:27:37.593 に答える