实际上就在手册中:https : //github.com/magnars/dash.el#anaphoric-functions。
更新:检查和展平宏
如果您使用的是lispy,请从以下开始:
;; anaphoric version
(--map (* it it) '(1 2 3 4))
和之前的点(--map
,您可以按xf调用lispy-flatten
并获取:
;; anaphoric version
(mapcar (lambda (it) (* it it)) (quote (1 2 3 4)))
这段代码有点复杂,因为破折号太急于委托和推迟:
(--reduce (max it acc) '(1 2 3 4))
之后xfM:
(let ((list-value (quote (1 2 3 4))))
(if list-value (--reduce-from (max it acc)
(car list-value)
(cdr list-value))
(let (acc it)
(max it acc))))
之后fjfxfM:
(let ((list-value (quote (1 2 3 4))))
(if list-value (let ((acc (car list-value)))
(--each (cdr list-value)
(setq acc (max it acc)))
acc)
(let (acc it)
(max it acc))))
之后fjxfM:
(let ((list-value (quote (1 2 3 4))))
(if list-value (let ((acc (car list-value)))
(let ((list (cdr list-value))
(it-index 0))
(while list (let ((it (car list)))
(setq acc (max it acc)))
(setq it-index (1+ it-index))
(!cdr list)))
acc)
(let (acc it)
(max it acc))))
可以说,这it
是隐式可迭代var,acc
是隐式累加器var。
有一次,我试图在Emacs上添加一个简短的lambda补丁来启用这种表示法,我认为这比照应宏更简单:
(map #(* % %) '(1 2 3 4))
(cl-reduce #(max %1 %2) '(1 2 3 4))
但是,它无济于事。