lisp程式繪製大樹 LISP 樹

2021-10-20 21:33:02 字數 2213 閱讀 9755

可以從cons單元構建樹的資料結構,如清單列表。

為了實現樹形結構,則必須設計功能,將遍歷cons 單元,在特定的順序,例如,前序,順序和後序的二進位制樹。

樹列表的列表

讓我們考慮由cons單元的樹狀結構,形成列出的清單如下:

((1 2) (3 4) (5 6)).

**,它可以表示為:

lisp樹的功能

雖然多數時候仍需要根據其它特殊需求編寫自己的樹的功能,lisp提供了一些樹的功能,您可以使用。

除了所有列表函式,以下是工作在樹結構函式:

函式描述

copy-treex &optional vecp

它返回cons單元×樹的副本。它遞迴地拷貝兩款車和cdr方向。如果x不是乙個cons單元,該函式只返回x不變。如果可選vecp引數為true,這個函式將向量(遞迴),以及cons單元。

tree-equal x y &key :test :test-not :key

它比較兩棵樹的cons單元。如果x和y是兩個cons單元,他們的汽車和cdr是遞迴比較。如果x和y都不是乙個cons單元,它們是由eql比較,或根據指定的測試。:key函式,如果指定,應用到這兩個目錄樹中的元素。

substnew old tree &key :test :test-not :key

它可以代替出現給老項與新項,在樹,這是cons單元的一棵樹。

nsubstnew old tree &key :test :test-not :key

它的工作原理與subst相同,但它破壞了原來的樹。

sublisalist tree &key :test :test-not :key

它的工作原理就像subst,只不過它採用的新舊對關聯表alist。樹(應用後:key函式,如果有的話)中的每個元素,與alist的車相比;如果它匹配,它被替換為相應的cdr。

nsublisalist tree &key :test :test-not :key

它的工作原理與sublis相同,而是乙個破壞性的版本。

示例 1

建立乙個名為main.lisp乙個新的源**檔案,並在其中輸入如下**:

(setq lst(list'(1 2) '(34)'(5 6))) (setq mylst (copy-list lst)) (setq tr (copy-tree lst)) (write lst) (terpri) (write mylst) (terpri) (write tr)

當執行**,它返回以下結果:

((12)(34)(56))((12)(34)(56))((12)(34)(56))

示例 2

建立乙個名為main.lisp乙個新的源**檔案,並在其中輸入如下**:

(setq tr'((1 2 (3 4 5) ((7 8) (7 8 9))))) (write tr) (setq trs (subst 7 1 tr)) (terpri) (write trs)

當執行**,它返回以下結果:

((12(345)((78)(789))))((72(345)((78)(789))))

建立自己的樹

讓我們嘗試建立自己的樹,使用lisp列表功能。

首先,讓我們建立乙個包含一些資料的新節點:

(defun make-tree(item)"it creates a new node with item."(cons(cons itemnil)nil))

接下來讓我們新增乙個子節點插入到樹:它會採取兩種樹節點,並新增第二棵樹作為第乙個的子樹。

接下來讓我們新增乙個子節點插入到樹:這將需要乙個樹節點,並返回該節點第乙個子節點,或nil,如果這個節點沒有任何子節點。

(defun first-child(tree)(if(nulltree)nil(cdr(car tree))))

(defunnext-sibling(tree)(cdr tree))

最後,我們需要乙個函式來返回乙個節點的資訊:

(defun data(tree)(car(car tree)))

示例本示例使用上述功能:

建立乙個名為main.lisp乙個新的源**檔案,並在其中輸入如下**:

當執行**,它返回以下結果:

10(2(345)((78)(789)))((12(345)((78)(789))(10)))

¥ 我要打賞 糾錯/補充 收藏

lisp實戰文庫 LISP經典程式

一 繪製地形圖符號 1.點狀符號 對於點狀符號 其位置固定 數量較多 且一般都帶有一定的標註 可逐個製作屬性塊圖元 單獨插入。2.線狀符號 利用autocad 中強大的線型定義。3.面狀符號 由充填符號在面域內按一定的排列方式組合而成。目前auto cad 在建築設計 工程施工放樣得到廣泛應用 au...

lisp正負調換 LISP程式庫

軟體簡介 如果您使用 autocad,下面的內容對您一定有幫助。在某些方面能大大提高您的工作效率。壓縮包中含有以下面程式,且均以源程式方式給出,您可以使用 參考 修改它。解壓縮後請先看說明檔案。bg.lsp 自動生成 asc.lsp 將文字檔案內容寫入圖中,字元是單個的 wf.lsp 將圖中字元寫入...

lisp正負調換 座標提取lisp程式

工程 標籤 字型大小大中小 訂閱該程式主要用於 cad點 point 三維座標提取,並將資料輸出為 cass 軟體中使用的資料格式 輸出格式 點號測量 y值,測量 x值,測量z值 例 1,100.3244,1232,433,25 2010 05 17 命令 plzbsc defun c plzbsc...