Lisp語言 檔案操作

2021-06-11 20:50:36 字數 2413 閱讀 8140

作為乙個基本功能,檔案操作對於大多數語言來講都是必須支援的,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 六,引...