"มัน" มีไว้ทำอะไร?


11

ตัวอย่างเช่นในคำจำกัดความของ-firstเรามี:

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

ความหมายของคำว่า "มัน" นั้นเป็นเรื่องยากมากที่ google หรือค้นหาในคู่มือ


4
คำถามที่แม่นยำควรถามและวิจารณ์ทั่วไปที่สมเหตุสมผลของ anaphoric นี้และที่ ในEmacsอย่างน้อย (มันคือ "เครื่องมือแก้ไขเอกสารด้วยตนเอง") สตริงเอกสารแต่ละอันของ anaphoric thingie ควรเรียกมันออกมาอย่างชัดเจนแม้ว่ามันจะดูเป็นคำพูดสำหรับบางคนที่คุ้นเคยกับมัน (sic) และแม้ว่ามันจะ เป็นเอกสารที่ดีในคู่มือ (เพียงความเห็นเดียว)
Drew

คำตอบ:


10

จริงๆแล้วมันมีสิทธิในคู่มือ: 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))

อย่างไรก็ตามมันไม่มีที่ไหนเลย


2
สำหรับผู้ที่ไม่มีความรู้แจ้ง pp-macroexpand-last-sexp
Malabarba

ดีฉันไม่รู้เกี่ยวกับฟังก์ชั่นนั้น มันใช้วิธีการที่แตกต่างกันในการทำ Multilining มากกว่าฉัน
abo-abo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.