จริงๆแล้วมันมีสิทธิในคู่มือ: 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 iterable โดยนัยและacc
เป็น var ตัวสะสมโดยปริยาย
ณ จุดหนึ่งฉันพยายามเพิ่มแลมบ์ดาสั้น ๆ ลงใน Emacs ที่จะเปิดใช้งานสัญกรณ์นี้ซึ่งฉันคิดว่าง่ายกว่ามาโครแบบ anaphoric:
(map #(* % %) '(1 2 3 4))
(cl-reduce #(max %1 %2) '(1 2 3 4))
อย่างไรก็ตามมันไม่มีที่ไหนเลย