2012-09-22 6 views
5

मैं एक पुराने (1999 या उससे पहले) योजना में लिखा (PLT-योजना, mzscheme दुभाषिया (?) कमांडलाइन उपकरण का उपयोग) परियोजना को फिर से शुरू करने की कोशिश कर रहा हूँ। मामलों को और खराब करने के लिए, मुझे योजना, या लिस्प नहीं पता (वास्तव में, मैं सीखना चाहता हूं, लेकिन यह एक और कहानी है)।वर्ष PLT-योजना परियोजना (पूर्व 1999) का पुनर्निर्माण करना

Sherman runtime version 0.5 
Hosted on MzScheme version 52, Copyright (c) 1995-98 PLT (Matthew Flatt) 
reference to undefined identifier: list->block 
:

github.com/akavel/sherman

अब, जब कोड चल रहा है, इसे बाहर एक त्रुटि संदेश के साथ नीचे की तरह bails:

मैं इस परियोजना के स्रोत कोड है

(मैंने पीएलटी-स्कीम संस्करणों 52, 53, 103, 103p1 की कोशिश की है। पहले के संस्करण mzscheme -L विकल्प की अनुमति नहीं देते हैं, जो रेफरी है परियोजना में इस्तेमाल sherman.bat स्क्रिप्ट में erenced। बाद के संस्करणों में भी, मैं क्या देख से

कठिनाई यह है कि कोड या विकल्पों के साथ कुछ और अधिक गंभीर समस्या है) list->block वास्तव में परिभाषित किया गया है - देखें:। collects/sherman/BLOCK.SS line 48। तो, क्या गलत है?

कोड चलाने के लिए, मैं निम्न चरणों का पालन:।

  1. डाउनलोड PLT-योजना वी 103p1 (the old versions download page से - पहली "रैकेट अब PLT योजना है" बैनर बंद करने) - विंडोज के लिए, उपयोग करें: mz-103p1-bin-i386-win32.zip
  2. अनजिप (उदा। निर्देशिका c:\PLT)।
  3. c:\sherman\collects\sherman पर सामग्री के साथ प्रतिलिपि बनाएँ: c:\PLT\collects\sherman (जहां c:\sherman में github repository की सामग्री शामिल है)।
  4. रन cmd.exe, फिर cd c:\sherman चलाएं।
 
(require-library "runtime.ss" "sherman") 
(parameterize ((current-namespace sherman-namespace)) (load "trivial.s")) 
(current-namespace sherman-namespace) 
  • उसके बाद, मैं त्रुटि मिलती है के रूप में वर्णित:
  • set PATH=c:\PLT;%PATH%
  • sherman.bat run trivial.s
    • इस आदेश वास्तव में, बराबर करने के लिए है मैं क्या समझ से ऊपर (MzScheme संस्करण 103p1 या जो कुछ भी के रूप में रिपोर्ट किया जाएगा)।

    क्या आप समस्या को हल करने में मेरी मदद कर सकते हैं?

    संपादित 2: हल हो गया!

    जिसे यह चिंता का विषय हो सकता है, मैं एक पूरी तरह से "How to use this project" instruction on the project page से विकसित जोड़ दिया है, soegaard's help को समस्या का हल धन्यवाद का ब्यौरा।

    संक्षेप में:

    copy trivial.s trivial.rs 
    rem (the above is workaround for problems with 'r2s.exe <trivial.r> trivial.rs') 
    sherman.bat compile trivial.rs 
    sherman.bat run trivial.zo 
    rem (or: sherman.bat run trivial.ss) 
    
+1

शायद, प्रत्येक फ़ाइल के शीर्ष पर '#lang mzscheme' का उपयोग करके, प्रासंगिक कोड को रैकेट में पोर्ट करना आसान होगा। –

+0

@ सैमोबिन-होचस्टेड: क्या मुझे पुराने पुस्तकालयों को विभिन्न कॉलों को पोर्ट करने में कठिनाई नहीं होगी? मैंने जो कोशिश की, उससे '(आवश्यक-लाइब्रेरी) 'फॉर्म (इस प्रोजेक्ट में बड़े पैमाने पर उपयोग किया जाता है) ऑनलाइन रैकेट दस्तावेज़ों में भी खोजने योग्य नहीं है? – akavel

+1

'आवश्यकता-पुस्तकालय' फ़ॉर्म 'आवश्यकता' का एक प्राचीन संस्करण है। आप दस्तावेज़ों में [पोर्टिंग मार्गदर्शिका] (http://docs.racket-lang.org/release/index.html) को पढ़ना चाहते हैं (उदाहरण के लिए 'आवश्यकता-पुस्तकालय' का उल्लेख है)। –

उत्तर

5

नहीं एक जवाब है, लेकिन कुछ नोट भी एक टिप्पणी के लिए बड़ा।

1. Sanity Check 

त्रुटि संदेश दर्शाता है list->block अनिर्धारित रहता है। सुनिश्चित करें कि block.ss में कोड block.ss में डालने के लिए बस सुनिश्चित किया गया है कि कोड चलाया गया है।


2. Random Thoughts 

फ़ाइल blocks.ss साथ शुरू होता है:

(require-library "functios.ss") 
(require-library "synrule.ss") 
(require-library "stream.ss" "sherman") 

फ़ाइल "शर्मन/stream.ss" भंडार, में है, लेकिन जहां "synrule.ss" और "functios है। एसएस "?

आह ... यह कोड पुराना है! यहां का विवरण दिया गया है कि require-library कैसे काम किया। यह MzLib के हिस्से के रूप में functios.ss और synrule.ss सूचीबद्ध करता है। जब आवश्यकता होती है-पुस्तकालय

एक फ़ाइल, पुस्तकालय नाम और परिणामस्वरूप मूल्य (रों) जुड़े किसी तालिका में recored कर रहे हैं लोड करने के लिए प्रयोग किया जाता है:

http://www.informatik.uni-kiel.de/~scheme/doc/mzscheme/node158.htm

के बाहर की जाँच करते हैं require-library कैसे काम वर्तमान नामस्थान के साथ। यदि पुस्तकालय के लिए आवश्यक लाइब्रेरी का मूल्यांकन किया गया है जो वर्तमान नामस्थान लोड तालिका में पहले ही पंजीकृत है, तो लाइब्रेरी फिर से लोड नहीं होती है; लोड तालिका में दर्ज परिणाम (ओं) को बदले में वापस कर दिया गया है।

तो जब block.ss में कोड चलाया जाता है, तो नाम किसी नामस्थान में संग्रहीत होते हैं। यदि वर्तमान नेमस्पेस गलत है, तो block.ss में कोड का मूल्यांकन किया जाता है, तो यह आपको list->block के त्रुटि संदेश को अपरिभाषित समझाएगा।

+0

बहुत बहुत धन्यवाद! मेरे पास 'runtime.ss' में 'शेरमेन-नेमस्पेस' की एक पूर्व परिभाषा है, लेकिन यह पर्याप्त संदिग्ध नहीं लग रहा था (esp। कि कुछ तरह की समान '#% सूची-> ब्लॉक') थी, और अब आपको धन्यवाद यह और अधिक संदिग्ध हो गया :) तो, स्थिति बेहतर हो गई, लेकिन ... अभी भी बिल्कुल ठीक नहीं है जहां मुझे उम्मीद थी ... इसलिए मैंने सवाल अपडेट किया, और यदि आप मुझे एक संकेत देने के लिए पर्याप्त प्रशंसा करते हैं तो बहुत आभारी होंगे थोड़ा और ... – akavel

+1

आपने 'trivial.s' में कोड को चलाने का प्रयास कैसे किया? मेरा मानना ​​है कि 'trivial.s' लेक्सर का आउटपुट है, इसलिए पहले इसे संकलित करना होगा और फिर इसे चलाएं। बैकक्वोट चीज योजना में लेक्सर लिखने से बचने का एक तरीका है (रीडमे में जो की टिप्पणियां देखें)। – soegaard

+0

एएचएच! ठीक है, विभिन्न 'एक्सटेंशन' + कुछ प्रयोगों को देखने के साथ मिलकर आपकी टिप्पणी ने अंततः मेरे लिए यह किया: 'copy trivial.s trivial.rs && sherman.bat संकलन trivial.rs && sherman.bat run trivial.zo' कॉपी करें। बहुत धन्यवाद! (और 'सूची-> ब्लॉक' के साथ अंतिम पैच को पहले वापस करने की आवश्यकता है) – akavel

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