स्प्रेडशीट के पीछे डेटा संरचनाएं क्या हैं?


35

मैं यह समझना चाहता हूं कि कैसे एक स्प्रेडशीट (नामित या अन्यथा पहचानी गई कोशिकाओं का मान या अन्य कोशिकाओं को संदर्भित करने वाले फ़ार्मुलों का समूह) हल किया जाता है। मैंने मौजूदा परियोजनाओं को देखने की कोशिश की है, लेकिन जीयूआई, क्रमांकन, घटनाओं आदि के साथ इतना कुछ चल रहा था कि मैं स्प्रेडशीट नहीं पा सका।

अपने सरलतम में यह कैसे काम करता है?


1
यदि आप एक स्प्रेडशीट कार्यान्वयन को देखना चाहते हैं जिसमें एक बहुत ही न्यूनतम gui है (और इस तरह समस्या के मांस से कम व्याकुलता), तो sc पर एक नज़र डालें: linuxjournal.com/article/10699?page=0,0
itbcece

जवाबों:


21

इसके मूल में, एक स्प्रेडशीट एक कार्यात्मक भाषा है जिसमें डायनामिक टाइपिंग और प्रत्येक फ़ंक्शन या मूल्य मैट्रिक्स में एक सेल के रूप में संदर्भित किया जा सकता है।

तरह बातें करने के बजाय भाग एक सेल में ही रखा गया है।(defn some-name ...)some-name

यदि आप डायनेमिक रूप से अपडेट होने वाली फंक्शनल लैंग्वेज आइड (जैसे कि क्लोजर के लिए लाइटटेबल) में जाते हैं, तो आपको स्प्रेडशीट के समान ही अधिक कार्यक्षमता दिखाई देगी। एक मान को एक नाम से बांधें, एक फ़ंक्शन लिखें जो उस मान का उपयोग करता है, मान को बदलता है और फ़ंक्शन का आउटपुट तुरंत बदलता है। यह एक्सेल =A1 + B2के स्थान पर लिखने जैसा कुछ करने जैसा है C3

इस प्रकार, कार्यात्मक प्रोग्रामर अक्सर स्प्रेडशीट को खिलौना कार्यक्रमों के रूप में लिखना पसंद करते हैं ... और शोध पत्रों का विषय भी। (हां, मुझे क्षमा करें, वे सभी ACM.org पेवॉल के पीछे हैं)

  • स्प्रेडशीट कार्यात्मक प्रोग्रामिंग

    कार्यात्मक प्रोग्रामिंग समुदाय ने स्प्रेडशीट में कुछ रुचि दिखाई है, लेकिन आश्चर्यजनक रूप से किसी ने भी मानक स्प्रेडशीट बनाने पर विचार नहीं किया है, जैसे एक्सेल, एक मानक कार्यात्मक प्रोग्रामिंग भाषा, जैसे हास्केल के साथ काम करना। इस पत्र में, हम एक तरीका बताते हैं कि यह किया जा सकता है। हमारी आशा है कि ऐसा करने से, हम कार्यात्मक प्रोग्रामिंग को आज़माने के लिए स्प्रेडशीट प्रोग्रामर प्राप्त कर सकते हैं।

  • प्रपत्र / 3: स्प्रेडशीट प्रतिमान की सीमाओं का पता लगाने के लिए एक प्रथम-क्रम दृश्य भाषा

    हालांकि कार्यात्मक प्रोग्रामिंग के अवरोधक कभी-कभी यह दावा करते हैं कि कार्यात्मक प्रोग्रामिंग बहुत मुश्किल या काउंटर-सहज ज्ञान युक्त अधिकांश प्रोग्रामर को समझने और उपयोग करने के लिए है, इसके विपरीत स्प्रेडशीट की लोकप्रियता को देखकर सबूत पाया जा सकता है। स्प्रेडशीट प्रतिमान, कार्यात्मक प्रोग्रामिंग प्रतिमान के पहले क्रम के सबसेट, को प्रोग्रामर और अंतिम उपयोगकर्ताओं दोनों के बीच व्यापक स्वीकृति मिली है। फिर भी, अधिकांश स्प्रेडशीट सिस्टम के साथ कई सीमाएँ हैं। इस पत्र में, हम उन भाषा विशेषताओं पर चर्चा करते हैं, जो पहले-क्रम, घोषणात्मक मूल्यांकन मॉडल से विचलित किए बिना इनमें से कई सीमाओं को समाप्त करती हैं।

  • फ़ंक्शन स्प्रेडशीट को लागू करना

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


विकिपीडिया पर स्प्रेडशीट की शुरुआत कुछ संकेत देती है कि किसी को कैसे लागू किया जाए:

एक स्प्रेडशीट एक संवादात्मक कंप्यूटर अनुप्रयोग है जो संगठन और सारणीबद्ध रूप में डेटा के विश्लेषण के लिए है। स्प्रेडशीट को पेपर अकाउंटिंग वर्कशीट के कम्प्यूटरीकृत सिमुलेशन के रूप में विकसित किया गया। यह कार्यक्रम एक सरणी के सेल के रूप में प्रतिनिधित्व डेटा पर संचालित होता है, जो पंक्तियों और स्तंभों में व्यवस्थित होता है। सरणी का प्रत्येक सेल एक मॉडल-व्यू-कंट्रोलर तत्व है जिसमें संख्यात्मक या पाठ डेटा हो सकते हैं, या अन्य कोशिकाओं की सामग्री के आधार पर स्वचालित रूप से गणना और प्रदर्शित करने वाले सूत्रों के परिणाम हो सकते हैं।

जावा पुस्तकालयों में व्यक्त किए गए मॉडल-व्यू-कंट्रोलर प्रतिमान की रूपरेखा से इस पर निर्माण । लेखक एप्लेट्स का उल्लेख करता है (थोड़ा दिनांकित, यह '93 -'96 में लिखा गया था) और उसके वेब पेज का उल्लेख करता है जो http://csis.pace.edu/~bergin/Java/applets.htm (हाँ) में जाता है , एप्लेट्स) संबंधित स्प्रेडशीट कोड के लिए http://csis.pace.edu/~bergin/Java/Spips.pava

मैं बताऊंगा कि स्प्रेडशीट की संपूर्णता, इस एप्लेट में 570 नहीं है, जिसमें दस्तावेज़ीकरण सहित 570 लाइनें हैं।

कहा कि, भाषा पर निर्भर करता है, आप शायद यह सब एक विरल सरणी में सिर्फ समारोह संकेत के साथ कर सकते हैं।


32

वैचारिक रूप से, प्रत्येक कोशिका एक निर्देशित चक्रीय ग्राफ का एक नोड है , और अन्य कोशिकाओं के संदर्भ उस ग्राफ में किनारों का निर्माण करते हैं। जब आप एक सेल बदलते हैं, तो आपके द्वारा बदले गए सेल से आने वाले सभी नोड्स का एक टोपोलॉजिकल सॉर्टिंग आपको ऑर्डर देगा जो आपको सेल का मूल्यांकन करने की आवश्यकता है। एक बार जब आप सही क्रम निर्धारित कर लेते हैं, तो यह केवल मानक अभिव्यक्ति पार्सिंग है।


3
ठीक है, मुझे नाइट्टी कहो लेकिन इस बात की कोई गारंटी नहीं है कि आप स्प्रैडशीट में कोई साइकिल नहीं बना सकते। वास्तव में, मैंने सिर्फ एक्सेल के साथ यह परीक्षण किया, एक चेतावनी प्राप्त की लेकिन इसे अनदेखा करके मैं आसानी से चक्रीय संदर्भ बना सकता था।
डॉक्टर ब्राउन

1
@DocBrown लूप में फंसने से बचने और प्रोग्राम को फ्रीज करने के लिए, संभवत: यह आखिरी लिंक पर कट जाता है।
इज़्काता

1
अच्छी बात है, @DocBrown। आपको अभी भी चक्र का पता लगाना है और गणना आदेश के प्रयोजनों के लिए डीएजी की तरह व्यवहार करना है, भले ही आप पुनरावृत्ति की अनुमति देने का निर्णय लें। आप बस कई बार उस आदेश से गुजरते हैं।
कार्ल बेवेलफेल्ट

इस तरह की डीएजी निर्भरता का अनुकरण करने के लिए कौन से डेटा संरचनाओं का उपयोग किया जा सकता है? मैं आसन्न मैट्रिक्स पर जाँच कर रहा था, लेकिन * n सरणी के साथ हम विशेषताओं को नोड्स और किनारों से नहीं जोड़ सकते थे। उदाहरण के लिए, सेल पर सूत्र गुण में से एक होगा
एंडी डफ्रेसने

6

जैसा कि पहले ही उल्लेख किया गया है, एक स्प्रेडशीट को एक साधारण हैश या शब्दकोश में संग्रहीत डीएजी (निर्देशित एसाइक्लिक ग्राफ) के रूप में आसानी से लागू किया जाता है। इसके साथ खेलने के लिए कुछ सरल कोड शायद इसे समझने का सबसे आसान तरीका है:

एक बहुत ही सरल पायथन संस्करण: http://code.activestate.com/recipes/355045-spreadsheet/

इसे इस ब्लॉग पोस्ट में समझाया गया और विस्तृत किया गया: http://ralsina.me/weblog/posts/BB5N.html

यहाँ GUI के साथ एक सरल जावास्क्रिप्ट संस्करण भी है: http://jsfiddle.net/ondras/hYfN3/


0

मैंने एक अजगर पैकेज को कोडित किया है जो आपको एमएस एक्सेल फ़ाइल उद्देश्य फ़ंक्शन कोशिकाओं की संरचना को पायथन में बदलने की अनुमति देता है। XL2py

सेल मानों को एक तानाशाही के लिए रखा गया है () प्रकार की वस्तु उनके मूल्यों को जोड़ देती है। सूत्र द्वारा अन्य कोशिकाओं के संदर्भ में कोशिकाओं में नोड्स शामिल हैं। नोड्स एक सेल को संदर्भित करता है जिसका मूल्य इसके सूत्र द्वारा परिभाषित किया गया है। प्रत्येक नोड सूत्र से, एक निर्भरता संरचना को परिभाषित किया जाता है ताकि परिभाषित किया जा सके कि परिपत्र संदर्भ मौजूद हैं या नहीं। नोड गणना आदेशों को शामिल कोशिकाओं निर्भरता संरचनाओं को ध्यान में रखकर परिभाषित किया गया है।

I / O ट्री-स्ट्रक्चर के रूप में, आप अपनी इच्छा के अनुसार किसी भी न्यूनतम एल्गोरिथ्म को पायथन में लागू कर सकते हैं।

मेरा सुझाव होगा कि आप https://github.com/gusmaogabriels/XL2py पर एक नज़र डालें

सादर, गेब्रियल

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.