Na przykład w definicji -first
mamy:
(--first (funcall pred it) list))
Oczywiście znaczenie „to” jest bardzo trudne do przeszukania w Google lub wyszukiwania w instrukcji.
Na przykład w definicji -first
mamy:
(--first (funcall pred it) list))
Oczywiście znaczenie „to” jest bardzo trudne do przeszukania w Google lub wyszukiwania w instrukcji.
Odpowiedzi:
Właściwie to jest tam w instrukcji: https://github.com/magnars/dash.el#anaphoric-functions .
Jeśli używasz lispy , zaczynając od:
;; anaphoric version
(--map (* it it) '(1 2 3 4))
i poprzedni punkt (--map
, możesz nacisnąć, xfaby zadzwonić lispy-flatten
i uzyskać:
;; anaphoric version
(mapcar (lambda (it) (* it it)) (quote (1 2 3 4)))
Jest to nieco bardziej skomplikowane z tym kodem, ponieważ dash jest zbyt chętny do delegowania i odroczenia:
(--reduce (max it acc) '(1 2 3 4))
Po 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))))
Po 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))))
Po 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))))
Wystarczy powiedzieć, że it
jest to domniemana iterowalna zmienna var i acc
niejawna zmienna akumulatorowa var.
W pewnym momencie próbowałem dodać krótką łatkę lambda do Emacsa, która umożliwiłaby tę notację, która moim zdaniem jest prostsza niż makra anaforyczne:
(map #(* % %) '(1 2 3 4))
(cl-reduce #(max %1 %2) '(1 2 3 4))
Jednak nigdzie nie poszło.