这是为了什么?


11

例如在定义中-first我们有:

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

自然,“ it”的含义很难用谷歌搜索或在手册中搜索。


4
确切地说,应该问一个问题,并且对隐喻的“那个和那个”有一个合理的普遍批评。至少在Emacs中(它是“自我文档编辑器”),照应性东西的每个doc字符串都应清楚地指出它,即使对熟悉它的人来说是冗长的(原文如此),即使它在手册中有详细记录。(只有一种意见。)
Drew

Answers:


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,acc是隐式累加器var。

有一次,我试图在Emacs上添加一个简短的lambda补丁来启用这种表示法,我认为这比照应宏更简单:

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

但是,它无济于事。


2
对于那些没有生气的人,pp-macroexpand-last-sexp也可以解决问题。
马拉巴巴

很好,我对该功能一无所知。与我相比,它对多行采用了不同的方法。
ABO血型ABO
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.