क्यों

(filter even? (range 10))

देता है (0 2 4 6 8)

लेकिन

((fn [x] filter even? x)
          (range 10))

देता है

(0 1 2 3 4 5 6 7 8 9)

?

0
eug100 19 सितंबर 2018, 09:59

1 उत्तर

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

आपके अनाम फ़ंक्शन में कोई समस्या है - आइए इसे अधिक पठनीय तरीके से लिखें:

((fn [x]
   (do filter
       even?
       x))
 (range 10))

अब मुझे लगता है कि यह स्पष्ट है कि यह संपूर्ण श्रेणी अनुक्रम क्यों लौटाता है: (range 10) का मान तर्क x के लिए बाध्य है और आपके फ़ंक्शन से परिणाम के रूप में वापस आ गया है।

सही संस्करण होगा:

((fn [x] (filter even? x))
 (range 10))
;; => (0 2 4 6 8)
8
amalloy 20 सितंबर 2018, 03:26