2012-05-01 14 views
5

में तारों को कैसे निकालना है, मैं समझने की कोशिश कर रहा हूं कि स्ट्रिंग को पढ़ने और स्ट्रिंग के अंदर मौजूद सामग्री का मूल्यांकन करने के लिए eval फ़ंक्शन कैसे प्राप्त करें।रैकेट

वर्तमान में मुझे पता है कि

> (eval '(+ 1 2)) 
    3 

लेकिन मुझे लगता है कि रैकेट के उपयोग के साथ जानकार नहीं हूँ। तो फिलहाल मैं इसे प्राप्त करने की कोशिश कर रहा हूं ताकि मैं यह कर सकूं:

> (eval "(+ 1 2)") 
    3 

उपयोगी संसाधनों के लिए कोई सलाह या लिंक की सराहना की जाएगी।

+1

मुझे लगता है कि यह तुम क्या चाहते है: http://stackoverflow.com/q/318952/535275 –

+3

साथ ही, अधिकांश मुहावरेदार रैकेट कोड eval के उपयोग से बचाता है। हो सकता है कि आपके पास एक उदाहरण है जहां आपको वास्तव में इसकी आवश्यकता है, लेकिन आप [इस आलेख] को पढ़ना चाहेंगे (http://blog.racket-lang.org/2011/10/on-eval-in- गतिशील- भाषाएं- सामान्य रूप से। एचटीएमएल) रैकेट में eval के उपयोग के बारे में। –

उत्तर

13

आप read का उपयोग open-input-string के साथ करना चाहते हैं। इसलिए जैसा:

-> (eval (read (open-input-string "(+ 1 2)"))) 
3 

तुम भी उपयोग कर सकते हैं with-input-from-string:

-> (with-input-from-string "(+ 1 2)" 
    (lambda() (eval (read)))) 
3 
+7

मैं '(eval (कॉल-इन-इनपुट-स्ट्रिंग" (+ 1 2) "पढ़ना) का उपयोग करना पसंद करता हूं)'। क्यूं कर? 1. स्ट्रिंग पोर्ट स्वचालित रूप से 'eval' से पहले बंद हो जाता है (' ओपन-इनपुट-स्ट्रिंग 'समाधान के विपरीत; ठीक है, तो स्ट्रिंग पोर्ट्स के लिए, शायद इससे कोई फर्क नहीं पड़ता है (जब तक आप गुइल का उपयोग नहीं कर रहे हैं ;-)) , फिर भी); 2. यह तरल पदार्थ/पैरामीटर का उपयोग नहीं करता है ('इनपुट के साथ-स्ट्रिंग' समाधान के विपरीत)। –

संबंधित मुद्दे