2008-11-25 41 views
8

如何將字符串轉換爲PLT方案中的相應代碼(其中不包含string->input-port方法)?例如,我想這個字符串轉換:將字符串轉換爲方案中的代碼

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

到這個列表:

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

是否有可能做到這一點,而無需打開一個文件?

回答

9

計劃有步驟read從輸入端口讀取s表達式,你可以將字符串轉換爲輸入流與string->input-port。所以,你可以讀一個字符串的方案對象與

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

我沒有安裝方案做,所以我只看過它from reference,並沒有實際測試它。

+0

+1誠實;) – 2012-05-02 02:12:17

+2

任何人來到這裏,用狡詐方案:`(讀(開放式輸入字符串「(引號富)」))`。 – d11wtq 2014-03-26 09:24:37

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) 
5

從PLT方案手冊:

(open-input-string string [name-v])創建從UTF-8編碼讀取字節的輸入端口(見第1.2.3節)串。可選的name-v參數用作返回端口的名稱;默認是'string

+0

這看起來像Scheme中的抽象反演。 Common Lisp具有「從字符串讀取」功能。 – Svante 2008-11-26 12:34:29

1

許多方案都有with-input-from-string str thunk,在str是標準輸入端口的上下文中執行thunk。例如,在開局方案:

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

計算結果爲:

(foo bar)

拉姆達是必要的,因爲一個thunk應該是不帶參數的過程。

相關問題