Bu ne için?


11

Örneğin, tanımımızda -first:

(--first (funcall pred it) list))

Doğal olarak "it" in anlamı google'da veya kılavuzda arama yapmak çok zordur.


4
Tam olarak sorulması gereken soru ve bu ve bu için anaprik bir makul genel eleştiri. In Emacs , en azından, (o "kendini belgeleyen editör" dır) her dokümanın dize bile bir artgönderimsel thingie açıkça bunun aşina (sic) kim bazı ayrıntılı görünse de, bunu arama ve gerektiği o bir kılavuzda iyi belgelenmiştir. (Sadece bir fikir.)
Drew

Yanıtlar:


10

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-flattenve 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.


2
Lispy olmayanlar için, p-macroexpand-last-sexp de hile yapmalıdır.
Malabarba

Güzel, bu işlevi bilmiyordum. Çok satırlılık için benden farklı bir yaklaşım kullanıyor.
abo-abo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.