वर्तमान में मेरे पास इस तरह का कुछ कोड है:

(defn compute-issue [some args] (or (age-issue some args) (name-issue some args)))

अधिक प्रकार के मुद्दे आ रहे हैं। क्या ऐसा कुछ है:

(defn compute-issue [some args] (first-not-nil [age-issue name-issue] some args))
; Where first-not-nil would be something like
(defn first-not-nil [fs & args]
  (if (empty? fs)
    nil
    (let [result (apply (first fs) args)]
      (if (nil? result)
        (recur (rest fs) args)
        result))))

मैं क्लोजर के लिए नया हूँ। क्या मैं किसी मौजूदा फ़ंक्शन को फिर से खोज रहा हूं?

0
Ionut Bilica 2 अप्रैल 2020, 14:26

1 उत्तर

सबसे बढ़िया उत्तर

Clojure.core में एक समान कार्य some-fn है:

विधेय का एक सेट लेता है और एक फ़ंक्शन f देता है जो पहला तार्किक सही मान . देता है इसके किसी भी तर्क के विरुद्ध इसके किसी कंपोज़िंग विधेय द्वारा लौटाया गया, अन्यथा यह वापस आ जाता है तार्किक झूठा। ध्यान दें कि f शॉर्ट-सर्किटिंग है जिसमें यह पहले निष्पादन को रोक देगा तर्क जो मूल विधेय के विरुद्ध तार्किक सत्य परिणाम को ट्रिगर करता है।

मुख्य अंतर हैं some-fn वास्तविक फ़ंक्शन एप्लिकेशन के लिए एक और फ़ंक्शन देता है, और वह फ़ंक्शन false परिणामों को भी त्याग देगा, जो ऐसा लगता है जैसे आप नहीं चाहते हैं। इसे वाक्यांश देने का यह एक और आसान तरीका है:

(defn first-not-nil [fs & args]
  (first
   (for [f fs
         :let [r (apply f args)]
         :when (some? r)]
     r)))
1
Taylor Wood 2 अप्रैल 2020, 12:22