;---------------------------------------
(setq a 5)
( mapcar '1+ (list a))
; 傳回 6
;---------------------------------------
(setq a '(1 2 3 4 5 6 7 8)) ( mapcar '1+ a) ;這會傳回:
; (2 3 4 5 6 7 8 9)
;----------------------------------------
假設說你有存儲在變數 arglist 中數據的列表。
(setq alist '(2.0 14.8 6.2 "M10"))
要放置的每個項目在列表中它自己的變數在你的例程使用。
做到這一點的一種方法是如下:
(setq a (nth 0 alist))
(setq b (nth 1 alist))
(setq c (nth 2 alist))
(setq d (nth 3 alist))
這樣可以工作,但處理數據時,每個變量需要一個程序語句,是一個極其緩慢的方式。
一個更有效的方法是使用MAPCAR技術。
(mapcar 'set '(a b c d) alist)
;----------------------------------------------------------------------------------------
如果你是從外部文件中讀取一個列表,
你的程序可能無法讀回列表中的元素,即使他們曾經是。
你的程序將讀回的字符串。例如:
您的列表應該看起來像這樣:
(10 30 50)
但是從文件中讀取列表中後,它看起來像這樣:
("10" "30" "50")
您可以使用(mapcar)到列表中轉換字符串到整數:
( setq b ( mapcar '( atoi ) thelist ))
;------------------------------------------------------------------------------------------
如果您使用的是AutoLISP函數,但你會如何使用(mapcar)與用戶定義的函數?
讓我們來看看這個例子:
我們有要轉換為弧度角度的清單。
(setq c '(22.5 45.0 60.0 75.5))
首先,我們會寫一個函數把角度轉換為弧度:
(defun dtr (a) (* pi (/ a 180.0)) )
我們的函數來轉換我們的名單看起來就像這樣:
( setq d ( mapcar 'dtr c))
此功能將對表C中的每個元素運行(DTR)函數。
換句話說,每個元件的值被傳遞到(DTR)的功能。
該功能也可以這樣寫:
( setq d ( mapcar ( quote dtr) c))