मुझे योजना की अद्भुत शक्ति sicp

व्यायाम १.४. ध्यान दें कि मूल्यांकन का हमारा मॉडल उन संयोजनों की अनुमति देता है जिनके ऑपरेटर यौगिक अभिव्यक्ति हैं। निम्नलिखित प्रक्रिया के व्यवहार का वर्णन करने के लिए इस अवलोकन का प्रयोग करें:

 #+BEGIN_SRC scheme
(define (a-plus-abs-b a b)
  ((if (> b 0) + -) a b))
(a-plus-abs-b 9 4)
 #+END_SRC

 #+RESULTS:
 : 13

मैं इसकी नकल करने की कोशिश करता हूं लेकिन मुझे नहीं पता कि प्रतीक ऑपरेटरों से कैसे निपटें

In [13]: 1 eval("+") 1                 
  File "<ipython-input-13-74042a5242a6>", line 1
    1 eval("+") 1
         ^
SyntaxError: invalid syntax


In [14]: 1 exec("+") 1                 
  File "<ipython-input-14-deabdb544acb>", line 1
    1 exec("+") 1
         ^
SyntaxError: invalid syntax

क्या योजना के अनुसार सीधे प्रतीक ऑपरेटर "+" का उपयोग करने का कोई समाधान है?

1
Calculus 24 पद 2019, 10:34

1 उत्तर

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

पायथन में हम + या - को सीधे पास नहीं कर सकते हैं और हमें उन्हें फंक्शन में लपेटने की जरूरत है, क्योंकि वे ऑपरेटर हैं न कि प्रक्रियाओं के रूप में योजना में, और इसलिए दुभाषिया द्वारा अलग तरीके से व्यवहार करने की आवश्यकता है।

हालांकि, हम केवल operator मॉड्यूल, और उन्हें किसी भी सामान्य फ़ंक्शन के रूप में लागू करना:

from operator import add, sub

def a_plus_abs_b(a, b):
    return (add if b > 0 else sub)(a, b)

a_plus_abs_b(9, 4)
=> 13

operator मॉड्यूल "पायथन के आंतरिक ऑपरेटरों के अनुरूप कुशल कार्यों का एक सेट निर्यात करता है"। एक अन्य (कम कुशल) विकल्प lambda का उपयोग करना होगा:

my_add = lambda x, y: x + y
my_sub = lambda x, y: x - y

def a_plus_abs_b(a, b):
    return (my_add if b > 0 else my_sub)(a, b)

a_plus_abs_b(9, 4)
=> 13
2
Óscar López 24 पद 2019, 21:33