Lisp的功能是使用defun
定義。
要打開一個單純的功能成interactive command(其可以使用M-X被調用或結合的鍵),可以使用interactive
。
該地區(選擇)傳遞給函數,使用"r"
代碼:
(defun my-command (beg end)
"Operate on each word in the region."
(interactive "r")
(mapC#'the-emacs-function-you-want-to-call-on-each-arg
;; split the string on any sequence of spaces and commas
(split-string (buffer-substring-no-properties beg end) "[ ,]+")))
現在,複製上面的形式向*scratch*
emacs buffer,將點(光標)上的功能,也就是說, mapc
或split-string
,然後點擊通過RET,您將看到一個解釋該功能的*Help*
buffer。
而點就可以了(不要忘記一些有意義的事來代替the-emacs-function-you-want-to-call-on-each-arg
),然後測試是通過選擇w=NULL,y=1,z=20
,打的Mx我的命令RET您可以評估通過敲擊CMx的函數定義。
順便提及,C-H˚F我的指令RET現在將示出了在*Help*
緩衝器Operate on each word in the region
。
來源
2013-06-13 02:50:51
sds
我相信#是不必要的。從elisp手冊,第12.7節。 「讀取語法'#''是使用'function'的一個簡短手段。以下形式全部等同於: (lambda(x)(* xx)) (function(lambda(x)(* xx )) #'(lambda(x)(* xx))「 – seanmcl
@seanmcl:'lambda'是一個非常特殊的情況。在ELisp(但不是其他的Lisp!)(但不一定是將來!)中,確實'#'foo'和''foo'是等價的,但是在處理函數調用時,應該使用前者。 – sds
你能否解釋爲什麼(對於其他lisps)#應該被使用?從ML/Haskell背景來看,將一個函數與其他數據區別對待似乎很奇怪。當#被省略時(函數與變量)是否讀取不同的單元格? – seanmcl