2011-09-20 45 views
4

在視覺口齒不清,您可以使用(atoi "123")"123"轉換爲123。看起來在clisp中沒有像atoi這樣的功能?clisp中atoi的相應標準函數是什麼?

任何建議表示讚賞!


現在我想'(1 2 3 20 30)轉換爲"1 2 3 20 30",那麼什麼是做到這一點的最好方法是什麼?

parse-interger可以將字符串轉換爲整數,以及如何將整數轉換爲字符串?我需要使用format函數嗎?

(map 'list #'(lambda (x) (format nil "~D" x)) '(1 2 3)) => ("1" "2" "3") 

但我DONOT知道如何爲哈斯克爾確實給它cnovert到"1 2 3"

concat $ intersperse " " ["1","2","3","4","5"] => "1 2 3 4 5" 

祝商祺!

回答

10

Common Lisp中,你可以使用read-from-string功能用於此目的:

> (read-from-string "123") 
123 ; 
3 

正如你可以看到,主要的返回值是讀取的對象,在這種情況下,恰好是一個整數。第二個值—的位置 —是難以解釋,但在這裏它表示將需要到一個閱讀功能消耗相同輸入的後續調用下一讀取字符串在未來想成爲字符。

注意read-from-string顯然不只是爲閱讀整數量身定做。爲此,您可以轉到parse-integer函數。其界面類似於read-from-string

> (parse-integer "123") 
123 ; 
3 

既然你問了一個模atoi,該parse-integer功能是比較合適的選擇。


解決你問題的第二部分,後期編輯,你可以交錯(或「點綴」)與format函數的字符串。本實施例中硬編碼單個空格字符作爲分離串,使用the format iteration control directives~{(開始),~}(端部),和~^(終止如果剩餘的輸入是空的):

> (format nil "Interleaved: ~{~S~^ ~}." '(1 2 3)) 
"Interleaved: 1 2 3." 

大致翻譯,格式字符串說,

對於輸入列表(~{)的每個項目,通過其正常的轉化率(~S)打印的項目。如果沒有項目,請停止迭代(~^)。否則,請打印一個空格,然後用下一個項目(~})重複該過程。

如果您希望避免對單個空間進行硬編碼,並將分隔符字符串作爲單獨提供的值進行接收,則有幾種方法可以實現。目前尚不清楚您是否需要這種靈活性。

+0

這是非常有幫助!謝謝! –

相關問題