मैं कुछ ऐसा लिखने की कोशिश कर रहा हूं जो फ़ंक्शन के रूप में इनपुट लेता है, जैसे "एफ (एक्स) = 2 * एक्स + 5", और इसे सामान्य समीकरण के रूप में गणना की जाती है।

मेरे पास वर्तमान में क्या है:

print("give any function") --vague as placeholder
x=50
str=string.gsub(io.read(), "x", tostring(x))
print(str*1)

यह ठीक काम करता है जब आपके पास इनपुट में x वैरिएबल होता है, इसे पहले सेट किए गए x वैरिएबल के साथ पहले की तरह बदल दिया जाता है। क्या होता है जब आप "1+1" जैसे कुछ डालते हैं, तो यह इसे स्वीकार नहीं करता है।

क्या "1 + 1" जैसी किसी चीज़ से इनपुट प्राप्त करने का कोई तरीका है, जिसे केवल उस स्ट्रिंग के रूप में दिया जाता है, जिसे 2 से परिकलित किया जा सकता है?

मैं यहां अनिवार्य रूप से क्या पूछ रहा हूं: "संख्या ऑपरेटर संख्या" प्रारूप के तहत कोई भी उपयोगकर्ता इनपुट केवल एक स्ट्रिंग के रूप में पढ़ता है, गणना योग्य समीकरण नहीं। कोई उपाय?

3
whakened i guess 21 अक्टूबर 2021, 17:30

1 उत्तर

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

आप कुछ और विस्तृत gsub का उपयोग कर सकते हैं और फिर फ़ंक्शन को lua कोड के रूप में लोड कर सकते हैं। चूंकि 1 + 1 का प्रारूप वास्तव में एक "फ़ंक्शन" प्रारूप नहीं है, इसलिए हमें मामले के लिए कुछ अतिरिक्त हैंडलिंग जोड़ने की आवश्यकता होगी जब फ़ंक्शन केवल एक ऑपरेशन हो

function evaluateFunction(funcStr, x)
  
  funcStr = "return " .. funcStr
  funcStr, replaced = funcStr:gsub("f%(", "function(")
  funcStr = funcStr:gsub("=", "return")
  
  if replaced ~= 0 then
    funcStr = funcStr .. " end"
  end
  
  print(funcStr)

  local func = load(funcStr)()
  if type(func) == "function" then
    print(func(x))    
  else
    print(func)
  end
end

evaluateFunction("f(x) = 2*x + 5", 50)
evaluateFunction("f() = 2*5")
evaluateFunction("1 + 1") 

आउटपुट:

रिटर्न फंक्शन (एक्स) रिटर्न 2 * एक्स + 5 एंड

105

रिटर्न फंक्शन () रिटर्न 2*5 एंड

10

वापसी 1 + 1

2

1
Nifim 21 अक्टूबर 2021, 17:52