वह किसके लिए है?


11

उदाहरण के लिए -firstहमारे पास की परिभाषा में है:

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

स्वाभाविक रूप से "इट" का अर्थ मैन्युअल में Google या खोज के लिए बहुत कठिन है।


4
संक्षेप में सवाल एक पूछना चाहिए, और एक उचित सामान्य आलोचना इस-और-कि। में Emacs , कम से कम (यह है "आत्म दस्तावेजीकरण संपादक"), प्रत्येक दस्तावेज़ स्ट्रिंग एक anaphoric thingie की स्पष्ट रूप से इसे बाहर बुलाना चाहिए, भले ही है कि कुछ है जो (sic) से परिचित हैं के लिए अत्यधिक शब्द लगता है, और यहां तक कि अगर यह एक मैनुअल में अच्छी तरह से प्रलेखित है। (सिर्फ एक राय।)
आकर्षित

जवाबों:


10

वास्तव में यह मैनुअल में वहीं है: https://github.com/magnars/dash.el#anaphoric-functions

अद्यतन: निरीक्षण और समतल मैक्रोज़

यदि आप लिस्पी का उपयोग कर रहे हैं , तो इसके साथ:

;; 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अंतर्निहित पुनरावृत्ति संस्करण accहै और अंतर्निहित संचयकर्ता संस्करण है।

एक बिंदु पर, मैंने Emacs में एक छोटा लैम्ब्डा पैच जोड़ने की कोशिश की, जो इस अंकन को सक्षम करेगा, जो मुझे लगता है कि एनाफ़ोरिक मैक्रोज़ की तुलना में सरल है:

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

हालांकि, यह कहीं नहीं चला गया।


2
बिना लिस्पि के उन लोगों के लिए, पीपी-मैक्रोफैक्जैंड-लास्ट-सेक्सप भी ट्रिक करना चाहिए।
मालाबार

अच्छा, मुझे उस समारोह के बारे में पता नहीं था। यह मेरे मुकाबले मल्टीलाइनिंग के लिए एक अलग दृष्टिकोण का उपयोग कर रहा है।
abo-abo
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.