2017-06-05 50 views
0

我有一個關於LISP程序設計語言問題如何讀取文件,並保存數據在LISP程序設計語言

我要做的就是讀取文件,並在文件中保存的數據。

要做到這一點,我發現這樣的功能,並執行它。

(defun get-file (pathname) 
    (with-open-file (stream pathname) 
    (loop for line = (read-line stream nil) 
      while line 
      collect line))) 

get-file("sample.txt") 

此打印的「未綁定變量」。爲什麼發生錯誤? (如果我剛纔定義的函數和編譯,沒有錯誤)

如何正確地寫入路徑? (我的數據文件(sample.txt)位於LISP代碼文件的同一目錄中。)

而且數據已保存在哪裏?

我怎樣才能將它們劃分(由於文件被逐行讀出,與單獨的屬性的數據應該在同一行保存)

文件數據保存這樣

name 23.0 22 123 33 //(one string and four numbers) 
name2 23.5 11 156 42 //(one string and four numbers) 
name3 21.7 15 167 55 //(one string and four numbers) 

請幫助LISP語言我 我'尷尬,因爲我的C語言完全適應:(

非常感謝!

+0

你的函數定義是錯誤的。你不要把參數列表中的字符串,你把變量名稱。 – Barmar

+0

數據不保存在任何地方,函數只是返回它讀取的所有行的列表。 – Barmar

+1

由於參數列表不正確,您應該一旦輸入函數定義就會收到錯誤。 – Barmar

回答

1
get-file 
("sample.txt") 

兩種表達方式。其中,用於評估變量get-file因爲它不是用作函數。然後你有("sample.txt")這個表達式,它試圖將字符串「sample.txt」作爲一個函數來調用,沒有參數

原因是您正在編寫algol語法,就好像它是C或Java一樣。你需要寫的時候你正在寫口齒不清,這樣的LISP語法:

(get-file "sample.txt") 

所以如果你爲你口齒不清文件將開始從同一目錄下的程序的路徑名相對於啓動程序的路徑在那裏打開文件。如果你在你的主目錄,那麼路徑是相對的,除非你使用絕對路徑。

爲了保存數據,你需要打開一個文件進行保存和輸出到文件中。現在你如何製作一個行列表,並且在REPL中沒有返回任何屏幕。

您可以通過空間分割字符串。您可以使用parse-number將代表數字的字符串轉換爲數字。以不安全的方式將(read-from-string "3.0") ; ==> 3.0

你需要準備自己學習一門新的語言。它的語法不同於C,它基於Algol。現在幾乎所有的編程語言都是如此,如果您知道幾種語言,您可能知道相同語言的幾種方言。給它時間,你很快就會有一種新的最喜歡的編程語言..