Per cosa è?


11

Ad esempio nella definizione di -firstabbiamo:

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

Naturalmente il significato di "it" è molto difficile da cercare o cercare nel manuale.


4
Proprio la domanda che ci si dovrebbe porre, e una ragionevole critica generale di questo ano-e-quello. In Emacs , almeno (è "l'editor di auto-documentazione"), ogni stringa di documenti di un oggetto anaforico dovrebbe chiamarlo chiaramente, anche se questo sembra prolisso ad alcuni che lo conoscono (sic), e anche se è ben documentato in un manuale. (Solo un'opinione.)
Estratto il

Risposte:


10

In realtà è proprio lì nel manuale: https://github.com/magnars/dash.el#anaphoric-functions .

Aggiornamento: controllo e appiattimento delle macro

Se stai usando lispy , a partire da:

;; anaphoric version
(--map (* it it) '(1 2 3 4))

e il punto prima (--map, è possibile premere xfper chiamare lispy-flattene ottenere:

;; anaphoric version
(mapcar (lambda (it) (* it it)) (quote (1 2 3 4)))

È un po 'più complesso con questo codice, poiché dash è troppo desideroso di delegare e posticipare:

(--reduce (max it acc) '(1 2 3 4))

Dopo 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))))

Dopo 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))))

Dopo 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))))

Basti dire che itè la var iterabile implicita ed accè l'accumulatore implicito var.

Ad un certo punto, ho provato ad aggiungere una breve patch lambda a Emacs che avrebbe abilitato questa notazione, che penso sia più semplice delle macro anaforiche:

(map #(* % %) '(1 2 3 4))
(cl-reduce #(max %1 %2) '(1 2 3 4))

Tuttavia, non è andato da nessuna parte.


2
Per quelli senza pigrizia, anche pp-macroexpand-last-sexp dovrebbe fare il trucco.
Malabarba,

Bene, non sapevo di quella funzione. Sta usando un approccio diverso per il multilining rispetto a me.
a bordo del
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.