Aslında el kitabında: https://github.com/magnars/dash.el#anaphoric-functions .
Güncelleme: makroları inceleme ve düzleştirme
Lispy kullanıyorsanız , ile başlayan:
;; anaphoric version
(--map (* it it) '(1 2 3 4))
ve daha önce nokta (--map
, sen basabilirsiniz xfaramak lispy-flatten
ve elde:
;; anaphoric version
(mapcar (lambda (it) (* it it)) (quote (1 2 3 4)))
Bu kodla biraz daha karmaşıktır, çünkü tire temsilci seçmek ve ertelemek için çok heveslidir:
(--reduce (max it acc) '(1 2 3 4))
Sonra 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))))
Sonra 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))))
Sonra 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))))
Söylemek yeterli, bu it
örtük yinelenebilir var ve acc
örtük akümülatör var.
Bir noktada, Emacs'a anaphoric makrolardan daha basit olduğunu düşündüğüm bu gösterimi etkinleştirecek kısa bir lambda yaması eklemeye çalıştım:
(map #(* % %) '(1 2 3 4))
(cl-reduce #(max %1 %2) '(1 2 3 4))
Ancak, hiçbir yere gitmedi.