Lisp語言 陣列

2021-06-07 06:23:14 字數 2217 閱讀 8520

討論了變數以後讓我們來看看lisp中的陣列,對於非lisp程式設計師來講這是再自然不過的了,很多程式語言的教材上都是在講述了一般性語法後講解陣列。不過,lisp程式設計師可能會有點疑問,為什麼不開始介紹列表呢?列表作為lisp語言的關鍵在lisp中起到了重要的作用,所以很多有關lisp的材料都是以介紹列表開始,這對於一般程式設計師來講有在思路轉換上有點困難。所以在這裡還是按一般程式設計師的習慣,先介紹陣列等常見的資料結構。

首先是有關陣列的定義,lisp中陣列的定義使用make-array函式,下面是陣列定義的樣例:

(setf test-array-1 (make-array 10 :initial-element 5))
以上**定義了乙個陣列名為test-array-1,陣列元素有10個,元素初值為5.

其中陣列是通過(make-array 10 :initial-element 5)生成的,生成後通過setf賦予了變數test-array-1。

定義了陣列後就需要開始使用它,使用過程需要知道乙個陣列的長度。陣列的長度可以使用函式length獲取,下面是樣例:

(length test-array-1)
以上語句通過length獲取test-array-1的長度,按以上的定義,這裡會返回10,表示陣列test-array-1中有10個元素。

對陣列的進一步操作最常見的就是獲取指定位置的元素,如獲取乙個陣列第5個元素。

獲取陣列的某乙個元素通過函式aref完成,下面是樣例

(aref test-array-1 5)
以上**獲取了test-array-1中的第6個元素。這裡注意**中使用了數字5,取出來的元素是第6個,因為lisp和其它一般語言一樣將0作為陣列的起始下標。

結合以上幾個函式,遍歷列印乙個陣列的**如下:

(setf end-index (- (length test-array-1 ) 1))

(loop for i from 0 to end-index do

(format *query-io* "element ~a is ~a ~%"

i(aref test-array-1 i)))

這裡沒有使用lisp中的迭代方法,而是簡單使用了loop迴圈,從0開始直到9,通過aref函式逐個取出元素,然後列印出來。

以上方法是遍歷乙個陣列是需要使用的,很多時候我們還需要對陣列的特定元素進行賦值操作。

lisp中對乙個陣列的元素進行賦值可以通過aref取的對應元素,然後直接通過setf對它進行賦值,下面是乙個樣例:

(setf (aref test-array-1 5) 50)
以上**將test-array-1陣列中的第6個元素(注意,不是第5個元素)的值設定成50.

結合以上所有樣例,陣列使用的完整樣例如下:

(defun array-test ()

;定義陣列

(setf test-array-1 (make-array 10 :initial-element 5))

;輸出陣列長度

(format *query-io* "test array has ~a elements~%" (length test-array-1))

;獲取陣列長度,儲存到end-index

(setf end-index (- (length test-array-1 ) 1))

;迴圈列印陣列

(loop for i from 0 to end-index do

(format *query-io* "element ~a is ~a ~%"

i(aref test-array-1 i)))

;將第6個元素設定為50

(format *query-io* "setting element 5 to 50 ------~%")

(setf (aref test-array-1 5) 50)

;再次迴圈輸出陣列

(loop for i from 0 to end-index do

(format *query-io* "element ~a is ~a ~%"

i (aref test-array-1 i)))

)

樣例執行截圖如下:

lisp不是函授型語言 LISP語言

拼音 lisp yuyan 外文 lisp 為非數值符號運算而設計的表處理語言。lisp是英文list processing 表處理 的縮寫。lisp語言是1960年j.麥卡錫在遞迴函式論基礎上首先設計出來的。lisp語言的形式化程度高,表達力強,適合於描述各種知識和編寫問題求解的程式,因此一直是用...

Lisp語言入門

目錄 一,執行環境 2,本地互動執行環境 二,輸入輸出 1,輸入 2,輸出 三,變數 1,格式化輸出 2,變數賦值 setf 四,函式 1,無參函式 2,帶參函式 3,關鍵字形參 五,列表 1,表list 按下標取元素nth 2,解引用quote 3,屬性表plist 按key取元素getf 六,引...

Lisp語言 檔案操作

作為乙個基本功能,檔案操作對於大多數語言來講都是必須支援的,lisp語言和大多數語言一樣提供了檔案操作介面。在lisp中對檔案的操作通過函式open來實現,通過open函式開啟乙個檔案,然後通過read函式讀取檔案內容,或者通過format函式將資料寫入檔案中。函式open的第乙個引數是目標檔案的路...