무엇입니까?


11

예를 들어 -first우리 의 정의에는 다음이 있습니다.

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

당연히 "it"의 의미는 매뉴얼에서 구글이나 검색하기가 매우 어렵다.


4
정확하게 질문해야 할 것과 아나 포릭에 대한 합리적인 일반적인 비판이 있습니다. 에서 이맥스 , 적어도, (그것은 "자기 문서화 편집기"입니다) 각 문서화 문자열 경우에도 anaphoric 거시기의 명확 그게 잘 알고 (원문) 누구 일부 자세한 보인다하더라도, 그것을 호출해야하고 그것을 설명서에 잘 설명되어 있습니다. (단 한 의견)
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이고 acc암묵적인 누적 기 var입니다.

한 시점에서, 나는이 표기법을 가능하게하는 짧은 람다 패치를 이맥스에 추가하려고 시도했는데, 이것은 아나 포릭 매크로보다 더 간단하다고 생각합니다.

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

그러나 그것은 아무데도 가지 못했습니다.


2
lispy가없는 사람들에게는 pp-macroexpand-last-sexp도 트릭을 수행해야합니다.
Malabarba

좋아, 나는 그 기능에 대해 몰랐다. 그것은 나와 다른 방식으로 멀티 라이닝을 사용하고 있습니다.
abo-abo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.