作為乙個基本功能,檔案操作對於大多數語言來講都是必須支援的,lisp語言和大多數語言一樣提供了檔案操作介面。
在lisp中對檔案的操作通過函式open來實現,通過open函式開啟乙個檔案,然後通過read函式讀取檔案內容,或者通過format函式將資料寫入檔案中。
函式open的第乙個引數是目標檔案的路徑和檔名,然後是一些引數,包括:
:direction用於指定檔案開啟後會執行的操作,預設值是讀取,如果需要寫入的話使用:output作為值
:if-does-not-exist用於指定目標檔案不存在時的操作,可以指定值為nil,表示檔案不存在時open函式返回nil,也可以指定為:create,表示檔案不存在的話就建立乙個。
:if-exists用於指定目標檔案存在時的操作,可以指定值為:overwrite,表示如果目標檔案存在的話直接覆蓋原檔案。
所以有下面這樣的樣例**:
(setq file-to-read (open "c:\\workspace\\lisp\\file-test.txt" :if-does-not-exist nil))
(setq file-to-write (open "c:\\workspace\\lisp\\file-test.txt" :direction :output :if-does-not-exist :create :if-exists :overwrite))
第一行**使用open函式以讀的方式開啟檔案「c:\\workspace\\lisp\\file-test.txt」,用變數file-to-read指向開啟的檔案,如果檔案不存在則file-to-read的值為nil
第二行**使用open函式以寫的方式開啟檔案「c:\\workspace\\lisp\\file-test.txt」,用變數file-to-write指向開啟的檔案,如果檔案不存在就建立乙個,如果檔案存在就覆蓋原檔案。
以寫的方式開啟檔案後,可以使用format函式將記憶體中的資料寫入檔案中,樣例如下:
(format file-to-write "~a~%" sample-list)
以上**將sample-list物件寫入檔案file-to-write中
以讀得方式開啟檔案後,可以通過read函式讀取檔案中的內容,樣例如下:
(read file-to-read)
以上**從檔案file-to-read中讀取一行,並嘗試按lisp語法解讀該行的內容,如果寫進去的是乙個列表,讀出來的也會是乙個列表。
在檔案操作完成後記得使用close函式關閉檔案,格式如下:
(close 檔案變數)
下面是檔案讀寫的乙個簡單樣例:
(defun my-write-file ()
;;檔案寫入樣例
;定義乙個列表變數
(setq sample-list '(a b c (1 2) d e f (one two three (right left up down) four) g h i))
;以寫的方式開啟檔案,將檔案控制代碼賦予變數file-to-write
(setq file-to-write (open "c:\\workspace\\lisp\\file-test.txt" :direction :output :if-does-not-exist :create :if-exists :overwrite))
;將變數sample-list寫入檔案
(format file-to-write "~a~%" sample-list)
;關閉檔案
(close file-to-write))
(defun my-read-file ()
;;檔案讀取樣例
;以讀的方式開啟檔案
(setq file-to-read (open "c:\\workspace\\lisp\\file-test.txt" :if-does-not-exist nil))
;如果檔案不存在就退出
(if (not file-to-read)
(progn
(format t "file open failed ~%")
(return-from my-read-file nil)))
;讀取檔案中的一行,將讀出來的值賦予list-readed
(setq list-readed (read file-to-read))
;關閉檔案
(close file-to-read)
;判斷list-readed是不是乙個列表,並在控制台輸出
(format t "is list-readed is a list:~a ~%" (listp list-readed))
;返回讀出來的值
list-readed)
lisp不是函授型語言 LISP語言
拼音 lisp yuyan 外文 lisp 為非數值符號運算而設計的表處理語言。lisp是英文list processing 表處理 的縮寫。lisp語言是1960年j.麥卡錫在遞迴函式論基礎上首先設計出來的。lisp語言的形式化程度高,表達力強,適合於描述各種知識和編寫問題求解的程式,因此一直是用...
Lisp語言 陣列
討論了變數以後讓我們來看看lisp中的陣列,對於非lisp程式設計師來講這是再自然不過的了,很多程式語言的教材上都是在講述了一般性語法後講解陣列。不過,lisp程式設計師可能會有點疑問,為什麼不開始介紹列表呢?列表作為lisp語言的關鍵在lisp中起到了重要的作用,所以很多有關lisp的材料都是以介...
Lisp語言入門
目錄 一,執行環境 2,本地互動執行環境 二,輸入輸出 1,輸入 2,輸出 三,變數 1,格式化輸出 2,變數賦值 setf 四,函式 1,無參函式 2,帶參函式 3,關鍵字形參 五,列表 1,表list 按下標取元素nth 2,解引用quote 3,屬性表plist 按key取元素getf 六,引...