एन.वाय.क्विस्ट आणि लिस्प प्रोग्रामिंगचा परिचय
एन.वाय.क्विस्ट कार्नेगी मेलॉन युनिव्हर्सिटी कॉम्प्युटर संगीत प्रकल्पामधून उपलब्ध आहे.
सामग्री
एन.वाय.क्विस्ट
ऑड्यासिटी आपला स्वतःचा प्लग-इन प्रभाव लिहिण्यासाठी एन.वाय.क्विस्ट प्रोग्रामिंग भाषा वापरण्याची परवानगी देतो. व्हीएसटी आणि एलएडीएसपीए प्लगइनच्या विपरीत, न्यक्विस्ट प्लगइन सामान्य मजकूर संपादकाचा वापर करुन लिहिले जाऊ शकतात आणि ते संकलित करण्याची आवश्यकता नाही.
एन.वाय.क्विस्ट लिस्प मांडणी आणि एसएएल नावाच्या अधिक पारंपारिक वाक्यरचना दोन्हीचे समर्थन करते. १.३.८ पूर्वीची ओडयासिटीआवृत्त्या केवळ लिस्पला समर्थन देतात, परंतु सद्य ऑड्यासिटी २.० मालिका लिस्प आणि एसएएल दोन्हीचे समर्थन करते. ऑड्यासिटीसह वापरासाठी प्लग-इन्स लिहिण्यासाठी आपल्या ऑड्यासिटीच्या आवृत्तीसाठी प्राधान्य आणि योग्य मांडणीसाठी योग्य न्यक्विस्ट मार्गदर्शक-पुस्तिका निवडा:
- एन.वाय.क्विस्ट आवृत्ती २.३७ माहितीपुस्तिका \xe2\x80\x93 संपूर्णपणे लिस्प वाक्यरचना वापरुन
- एन.वाय.क्विस्ट ३.१x संदर्भ माहितीपुस्तिका \xe2\x80\x93 नवीनतम एन.वाय.क्विस्ट मार्गदर्शक-पुस्तिका (मुख्यतः एसएएल वाक्यरचना वापरुन).
लक्षात ठेवा ऑड्यासिटीसह वापरण्यासाठी आपल्याला साधे प्लग-इन लिहिण्यासाठी एन.वाय.क्विस्ट डाउनलोड करण्याची आवश्यकता नाही. आपल्याला लिस्प आणि २.3737 माहितीपुस्तिकासह कार्य करण्यासाठी आवश्यक असलेल्या सर्व मूलभूत सूचना खाली आहेत. आपण एसएएल देखील एक्सप्लोर करू इच्छित असल्यास आणि ऑड्यासिटीमधील नवीनतम न्युक्विस्ट वैशिष्ट्यांसाठी , विकीवर एन.वाय.क्विस्ट दस्तऐवजीकरण पहा .
लिस्प
एन.वाय.क्विस्ट लिस्प वर आधारित आहे. आपण यापूर्वी लिस्प मध्ये प्रोग्राम केलेले असल्यास आपण हा विभाग वगळू शकता किंवा पुढील पृष्ठावर जाऊ शकताः एन.वाय.क्विस्टमध्ये प्रोग्रामिंग . अन्यथा, येथे लिस्पची अत्यंत संक्षिप्त ओळख आहे :
लिस्प (आणि म्हणून न्यक्विस्ट) मध्ये, प्रत्येक गोष्ट एस-एक्सप्रेशन असते, जी केवळ स्पेसद्वारे विभक्त आणि कंसात बंद केलेल्या टोकनची (शब्द) यादी आहे. एस-एक्सप्रेशन मधील कार्येचे नाव नेहमीच प्रथम टोकन असते आणि इतर सर्व टोकन या कार्येचे वितर्क असतात. येथे एक साधे उदाहरण आहे:
(setf area (* 3.14159 (expt radius 2)))
चला या उदाहरणाचे खंडन करूया. बाहेरील एस-अभिव्यक्तीचे तीन सदस्य आहेत. पहिले, setf कार्याचे नाव आहे (ते सेट-फील्डसाठी वापरले जाते). setf चा वापर व्हेरिएबलला मूल्य नियुक्त करण्यासाठी केला जातो. set आणि setq सारखी समान कार्ये आहेत , परंतु setf सर्वात शक्तिशाली आहे, म्हणून आम्ही आमच्या उदाहरणांमध्ये वापरणार आहोत.) setf नंतर area येतो , जे व्हेरिएबलचे नाव आहे जे आम्ही सेट करणार आहोत. पुढे या व्हेरिएबलला नियुक्त करण्यासाठी मूल्य येते, जे या प्रकरणात दुसरे एस-एक्सप्रेशन आहे.
लिस्पकडे गणित कार्यांसाठी कोणतेही विशेष ऑपरेटर नसतात \xe2\x80\x93 ते सर्व कार्ये आहेत जसे की, उपसर्ग नोटेशन वापरून, जेथे फंक्शनचे नाव (किंवा ऑपरेटर) त्याच्या वितर्कांपूर्वी येते. तर 3 आणि 7 च्या उत्पादनाऐवजी लिस्पमध्ये (* 3 7) लिहा. एन.वाय.क्विस्ट मध्ये, expt (घातांक) कार्य त्याचा पहिला वितर्क दुसऱ्या वितर्काच्या बळावर वाढवते. म्हणून (* 3.14159 (expt radius 2)) म्हणजे त्रिज्येच्या चौरसाच्या 3.14159 पट किंवा वर्तुळाच्या क्षेत्रफळाचे सूत्र.
प्रत्येक वेळी ही पूर्ण अभिव्यक्ती टाइप करण्याऐवजी, वर्तुळाच्या क्षेत्रफळासाठी एक फंक्शन परिभाषित करूया, ज्याला आपण प्रत्येक वेळी कॉल करू शकतो:
(defun circlearea (radius) (* 3.14159 (expt radius 2)))
defun फंक्शन नवीन फंक्शन परिभाषित करण्यासाठी वापरले जाते. प्रथम अर्ग्युमेंट फंक्शनचे नाव आहे, या प्रकरणात ते वर्तुळक्षेत्र आहे. दुसरा आर्ग्युमेंट म्हणजे फंक्शनच्या वितर्कांची एक सूची आहे जी परिभाषित करायची आहे - ही काही प्रकरणांपैकी एक आहे जिथे तुमच्याकडे एस-एक्सप्रेशन आहे ज्याचा फंक्शन कॉल म्हणून अर्थ लावला जात नाही. शेवटी शेवटची अभिव्यक्ती म्हणजे फंक्शनचे मूल्य. आता जर आपल्याला त्रिज्या r च्या वर्तुळाच्या क्षेत्रफळाची गणना करायची असेल तर आपल्याला फक्त गणना करावी लागेल:
(setf area (circlearea r))
एस-अभिव्यक्ती हे फक्त सूचीचे प्रतिनिधित्व आहे. Lisp जवळजवळ प्रत्येक गोष्टीचे प्रतिनिधित्व करण्यासाठी सूची वापरते (लिस्प हे नाव लिस्ट प्रोसेसिंग भाषेतून आले आहे), त्यामुळे याद्या कशा हाताळायच्या हे जाणून घेणे उपयुक्त आहे. चला एका व्हेरिएबलला संख्यांची सूची नियुक्त करून सुरुवात करूया. आपण हे पूर्णपणे करू शकत नाही:
(setf mylist (1 2 3 4 5)) <-- error!
हे कार्य करत नाही याचे कारण असे आहे की जेव्हाही एन.वाय.क्विस्ट एखादे एस-अभिव्यक्ती पाहते, तेव्हा ते त्याचे फंक्शन म्हणून मूल्यमापन करण्याचा प्रयत्न करते जोपर्यंत तुम्ही ते अन्यथा सांगत नाही. आर्ग्युमेंट्स घेणारे “1” नावाचे कोणतेही फंक्शन नसल्यामुळे (2 3 4 5) , यामुळे त्रुटी निर्माण होईल. लिस्पला सांगण्यासाठी की तुम्हाला एस-अभिव्यक्ती अक्षरशः हाताळायची आहे आणि फंक्शन म्हणून त्याचे मूल्यमापन करायचे नाही, तुम्ही ते उद्धृत करता. एन.वाय.क्विस्ट मध्ये, तुम्ही सूचीसमोर एकच अवतरण चिन्ह टाकून उद्धृत करू शकता, जसे:
(setf mylist '(1 2 3 4 5))
एन.वाय.क्विस्ट एक यादी कार्य देखील प्रदान करते जे आपण याद्या तयार करण्यासाठी वापरू शकता - जर सूचीतील काही घटक कार्ये असतील तर हे उपयुक्त आहे:
(setf mylist (list 1 2 3 4 (sqrt 25)))
गोष्टी यादीतून काढून टाकण्यासाठी आपण प्रथम आणि उर्वरित कार्ये वापरू शकता . (पारंपारिकरित्या, त्यांना अनुक्रमे car आणि cdr म्हटले गेले , परंतुप्रथम आणि उर्वरित लक्षात ठेवणे खूप सोपे आहे. दोन्ही नावे सेट्स नेक्विस्टमध्ये समर्थित आहेत.) (प्रथम माझीयादी) आउटपुट 1 आहे आणि (बाकीचीमाझी यादी) (2 3 4 5) यादी आहे. तर सूचीचा दुसरा घटक म्हणजे (first (rest mylist)).
काही सामान्य लिस्प कार्ये
एन.वाय.क्विस्ट मधील चिन्हे (जसे व्हेरिएबल नावे आणि फंक्शनची नावे) केस-संवेदी नाहीत. ते अंतर्गतपणे अप्परकेसमध्ये रूपांतरित केले जातात. |
गणिती कार्ये
लिस्प | एसएएल | वर्णन |
(+ a b) | a + b | बेरीज |
(- a b) | a - b | वजाबाकी |
(* a b) | a * b | गुणाकार |
(/ a b) | a / b | भागाकार |
(truncate expr) | truncate (expr) | round down expr to integer (floor) |
(float expr) | float (expr) | integer expr to floating-point |
(rem a b ...) | rem (a b...) | संख्यांच्या सूचीपैकी उर्वरित |
(min a b ...) | min (a b ...) | किमान |
(max a b ...) | max (a b ...) | कमाल |
(abs expr) | abs (expr) | संख्येचे परिपूर्ण मूल्य |
(random n) | random (n) | १ आणि n-१ मधील यादृच्छिक पूर्णांक |
(rrandom) | rrandom () | ० आणि १ दरम्यान फ्लोटिंग पॉइंट यादृच्छिक |
(sin expr) | sin (expr) | साइन |
(cos expr) | cos (expr) | कोसाइन |
(tan expr) | tan (expr) | टँजेंट |
(expt expr) | expt (expr) | घातांक (a ते b च्या घात) |
(sqrt expr) | sqrt (expr) | वर्गमुळ |
(< a b) | a < b | b पेक्षा कमी चाचणी |
(<= a b) | a <= b | b पेक्षा कमी किंवा समान साठी चाचणी |
(> a b) | a > b | b पेक्षा जास्त चाचणी |
(>= a b) | a >= b | b पेक्षा जास्त किंवा समान साठी चाचणी |
(= a b) | a = b | समानतेसाठी चाचणी |
(/= a b) | a /= b | असमानतेसाठी चाचणी |
गणिती उदाहरणे
x ची n-वी शक्ती :
power(x, n) ;; SAL मध्ये (power x n) ;; LISP मध्ये
संख्येचे n-वे मूळ :
power(x, 1.0 / n) ;; in SAL (power x (/ 1.0 n)) ;; in LISP
s ध्वनीचे n-वे मूळ :
return s-exp(s-log(s) * (1.0 / n)) ;; in SAL (s-exp (mult (s-log s) (/ 1.0 n))) ;; in LISP
दोन ध्वनि x आणि n सह n-वे मूळ :
return s-exp(s-log(x) * s-recip(n)) ;; in SAL (s-exp (mult (s-log x) (s-recip n))) ;; in LISP
फंक्शन्सची यादी
Lisp | SAL | वर्णन |
---|---|---|
(first expr) | first (expr) | सूचीचा पहिला घटक (car) |
(rest expr) | rest (expr) | उर्वरित यादी (cdr) |
(reverse expr) | reverse (expr) | यादी उलट करा |
(list expr ...) | list (expr...) | अभिव्यक्तींची यादी तयार करा |
(append expr ...) | append (expr...) | दोन किंवा अधिक याद्या जोडा |
(length expr) | length (expr) | यादीची लांबी |
(maplist fcn list1 list...) | maplist (fcn list1 list...) | सूचीतील प्रत्येक घटकावर फंक्शन लागू करा |
सशर्त अभिव्यक्ती
Lisp | SAL | वर्णन |
---|---|---|
(if test-expr true-stmt [false-stmt]) | if test-expr then true-stmt [else false-stmt] | test-expr सत्य असल्यास, true-stmt चे मूल्यांकन करते, अन्यथा false-stmt चे मूल्यांकन करते |
(when test-expr statement) | when test-expr statement | जेव्हा test-expr सत्य असते, तेव्हा विधानाचे मूल्यमापन करा |
(unless test-expr statement) | unless test-expr statement | जेव्हा test-expr खोटे असेल तेव्हा विधानाचे मूल्यमापन करा |
(cond [(pred1 expr1) [(pred2 expr2) ... ]]) | pred1 सत्य असताना, expr1 चे मूल्यमापन करा, अन्यथा pred2 खरे असल्यास... | |
(case test-expr [(value statement) ... ]) | test-expr शी जुळणार्या पहिल्या मूल्यासाठी विधानाचे मूल्यमापन करा |