करी के लिए यह मेरा कार्य है:

(define (curry g)
  (lambda(x)
    (lambda(y)
      (g x y))))

मैं करी फ़ंक्शन का उपयोग करके संख्या 1 के बराबर नहीं की सूची बनाने की कोशिश कर रहा हूं।

मेरे पास अब तक क्या है:

(define filter-numbers ((curry filter)
                       ((curry equal?) 1)))

लेकिन यह केवल 1 के बराबर संख्याओं की सूची तैयार करता है।

पूर्व । (फ़िल्टर-नंबर (सूची 1 2 3)) -> (सूची 1)

मैं प्राप्त करना चाहता हूं (सूची 2 3) लेकिन पता नहीं कैसे। क्या कोई मदद कर सकता है?

2
Bryan 23 नवम्बर 2015, 13:48

3 जवाब

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

इसे आज़माएं - अंतर्निहित curry और filter-not प्रक्रियाएँ:

(define filter-numbers 
  (curry filter-not (curry equal? 1)))

वैकल्पिक रूप से, curry के आपके कार्यान्वयन का उपयोग करते हुए:

(define filter-numbers 
  ((curry filter-not)
   ((curry equal?) 1)))

किसी भी तरह से, यह उम्मीद के मुताबिक काम करता है:

(filter-numbers '(1 2 3 4 5 1 7 1))
=> '(2 3 4 5 7)
4
Óscar López 23 नवम्बर 2015, 15:20

आप निम्न प्रकार से एक फंक्शन my-compose बना सकते हैं:

(define (my-compose f g)
  (lambda (x) (f (g x))))

और अपने करी समारोह के साथ:

(define (curry g)
  (lambda (x) (lambda (y) (g x y))))

आप एक फ़िल्टर फ़ंक्शन बना सकते हैं (फ़िल्टर का उपयोग किए बिना)

(define (filter-numbers lst) 
  (filter (my-compose not ( (curry  =) 1)) lst))


(filter-numbers (list 1 2 1 1 3 4 2 ))  => (list 2 3 4 2)
0
ssundarr 25 नवम्बर 2015, 07:39

फ़िल्टर फ़ंक्शन उन तत्वों को बनाए रखता है जो संतुष्ट परीक्षण करते हैं। आपको अपने विधेय को नकारना होगा।

1
coredump 23 नवम्बर 2015, 14:19