如何將字符串轉換爲PLT方案中的相應代碼(其中不包含string->input-port
方法)?例如,我想這個字符串轉換:將字符串轉換爲方案中的代碼
"(1 (0) 1 (0) 0)"
到這個列表:
'(1 (0) 1 (0) 0)
是否有可能做到這一點,而無需打開一個文件?
如何將字符串轉換爲PLT方案中的相應代碼(其中不包含string->input-port
方法)?例如,我想這個字符串轉換:將字符串轉換爲方案中的代碼
"(1 (0) 1 (0) 0)"
到這個列表:
'(1 (0) 1 (0) 0)
是否有可能做到這一點,而無需打開一個文件?
計劃有步驟read
從輸入端口讀取s表達式,你可以將字符串轉換爲輸入流與string->input-port
。所以,你可以讀一個字符串的方案對象與
(read (string->input-port "(1 (0) 1 (0) 0)"))
我沒有安裝方案做,所以我只看過它from reference,並沒有實際測試它。
從這個類似的問題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)
從PLT方案手冊:
(open-input-string string [name-v])
創建從UTF-8編碼讀取字節的輸入端口(見第1.2.3節)串。可選的name-v
參數用作返回端口的名稱;默認是'string
。
這看起來像Scheme中的抽象反演。 Common Lisp具有「從字符串讀取」功能。 – Svante 2008-11-26 12:34:29
許多方案都有with-input-from-string str thunk
,在str
是標準輸入端口的上下文中執行thunk
。例如,在開局方案:
(with-input-from-string "(foo bar)" (lambda() (read)))
計算結果爲:
(foo bar)
拉姆達是必要的,因爲一個thunk
應該是不帶參數的過程。
+1誠實;) – 2012-05-02 02:12:17
任何人來到這裏,用狡詐方案:`(讀(開放式輸入字符串「(引號富)」))`。 – d11wtq 2014-03-26 09:24:37