淺談 Lisp 裡面的 Lambda

我初學 Emacs Lisp 時,一直搞不懂 Lisp 裡面的 lambda 到底是什麼東西。多年後才開竅,豁然開朗感覺真是很神奇。

以下會拿 Emacs Lisp 跟 Scheme 當例子。

匿名函數

簡單來說,Lisp 裡的 lambda 就是沒有名字的函數。精確的說,lambda 是 Lisp 中拿來表示「匿名函數」(anonymous function) 的方法

…這種說法誰聽得懂啦。那麼先來用大家在 Common Lisp / Emacs Lisp 中最熟悉的 defun 定義一個函數 double,它接受 x 一個參數,最後回傳 x * 2 的值:

1
2
3
4
5
6
7
8
9
;;;; Emacs Lisp / Common Lisp
(defun double (x)
(* x 2))
;; 來呼叫看看:
(double 7)
;; => 14
;;很簡單吧?

Read More

Emacs Lisp 中 Process 相關的玩意

這幾天在寫 hexo.el 遇到一些 Emacs Lisp 中 process 相關的處理方式,做個簡單的整理筆記(也順便試用 hexo.el )。不過有些因為目前我沒用過/用不到,所以也懶得去研究其中差異,不要打我。

Process

start-process (Async)

(start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS)

這是 Emacs Lisp 中最低階的 process 呼叫方法之一,他 stdout 輸出的 BUFFER (fundamental-mode) 連 ANSI color 都沒有(所以會看到一堆亂七八糟的 ANSI color 控制字元),要自己使用 set-process-filter 來自訂 Buffer 的 IO。

Read More