स्व-व्याख्या करने वाला दुभाषिया


25

इस सवाल पर जॉर्ज एडिसन की एक टिप्पणी के आधार पर , सबसे छोटे आत्म-व्याख्याकार दुभाषिया लिखें।

  • आप अपने चयन की भाषा का उपयोग कर सकते हैं।
  • खाली भाषाओं की गिनती नहीं होती। आपका कार्यक्रम कम से कम दो वर्ण लंबा होना चाहिए।
  • कार्यक्रम को पूरी भाषा की व्याख्या करने की आवश्यकता नहीं है , बस भाषा सुविधाओं का एक ट्यूरिंग-पूर्ण सबसेट (जिसमें दुभाषिया शामिल है)।
  • Quines गिनती नहीं है।
  • अपनी भाषा के अंतर्निहित evalफ़ंक्शन या समकक्ष का उपयोग न करें । उसी के लिए जाता है apply, आदि।

1
(हम्म .. मुझे कुछ करना चाहिए /usr/bin/cat) ट्यूरिंग-पूर्णता के बारे में क्या?
मिंग-तांग

@ SHiNKiROU: धन्यवाद, मैंने एक परीक्षण के रूप में ऐसा नहीं सोचा था। अपडेट किया गया।
होआ लॉन्ग टैम

संबंधित: भाषा w / स्टैक ओवरफ्लो पर स्वयं में लिखा गया सबसे छोटा दुभाषिया , हालांकि कुछ (केवल एक?) उत्तर हैं जो वास्तव में यहां दिए गए नियमों का पालन करते हैं।
dmckee

1
क्या हमें उस स्कीम को फिर से लिखने की इजाजत है, या हम होस्ट की भाषा को ठीक मान सकते हैं?
जेबी

@ जेबी: भाषा की स्ट्रिंग प्रसंस्करण उपयोगिताओं ठीक हैं, जिसमें sexpपार्सर भी शामिल है।
होआ लॉन्ग टैम

जवाबों:


19

सीआई - २६०

,(1p0(2d())(41(2d())('#((1p0()(10()(1d,1p$)=)<)$2d,1p$)(40(1d,1c$^)(''(1d,^)('0
'9('0-(,'0'9('0-2p10*+1p$)(!1d)~)$^)(0($)'$(^)'^(&)'&(c)'c(p)'p(d)'d(=)'=(<)'<(
>)'>(~)'~(.)'.(,)',(!)'!(+)'+(-)'-(*)'*(/)'/(%)'%()38p(1p3p0(3d)((2)(3)=p1d1p$)
=)$)~)=)=,2p$&)=)=)<)$$

320 → 260: सरल चरित्र-से-निर्देश मैपिंग पुश करें, फिर उन पर गुना। यह प्रति केस कोड आकार को आधा कर देता है (18 मामले होते हैं), लेकिन तह करने के लिए 30 वर्णों की लागत होती है।

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

1^      # Push a 1, and "lift" it to be a code literal.
(5 +)   # Define a code literal.
&       # Join the two code literals, forming (1 5 +)
$       # Execute the code literal.

दुभाषिया इसे चलाने से पहले पूरे कार्यक्रम का एक कोड टुकड़ा बनाता है, इसलिए इसे एक संकलक भी माना जा सकता है। इस वजह से, दुभाषिया को ढेर करने के परिणामस्वरूप घातीय रन-टाइम ओवरहेड नहीं होता है।

दुभाषिया अपने सभी परिचालकों को सीधे मेजबान दुभाषिया से प्राप्त करता है। हालाँकि, यह स्वयं के द्वारा पार्सिंग करता है, इसलिए कोड का अधिकांश हिस्सा केवल अनुक्रम है जो वर्णों को उनके संबंधित कोड शाब्दिक में अनुवाद करता है। यह उपयोग करने के समान नहीं है eval, लेकिन यह बताता है कि किसी भी प्रोग्रामिंग भाषा के क्रियान्वयन की निर्भरता इसकी मेजबान भाषा / वास्तुकला के शब्दार्थ पर कैसे है।


भाषा संदर्भ:

यहां दुभाषिया प्राप्त करें

ब्लाकों

  • ( ... )

    एक "ब्लॉक" बनाएं, जो प्रभावी रूप से बिना किसी संदर्भ के निर्देशों की एक सूची है। आंतरिक रूप से, यह मशीन कोड भी हो सकता है।

  • खंड $

    एक ब्लॉक को बुलाओ। कैली को वैश्विक स्टैक सौंपा गया है, जिसमें ब्लॉक कहा जा रहा है।

  • मूल्य ^

    एक मूल्य उठाएँ। अर्थात्, इसे उस ब्लॉक में बदल दें जो उस मूल्य को बढ़ाता है।

    उदाहरण :

       1 ^
    == (1)
    
  • ब्लॉक 1 ब्लॉक 2 &

    दो ब्लॉकों को मिलाएं, जो एक क्रम में दोनों को चलाता है।

    उदाहरण :

       (1) (2) &
    == (1 2)
    

ढेर हेरफेर

  • n c

    स्टैक के nth मान की प्रतिलिपि बनाएँ।

    उदाहरण :

       5 4 3 2 1 0 3c
    == 5 4 3 2 1 0 3
    
  • n p

    स्टैक के एनटी मूल्य को हटा दें (इसे हटा दें, और इसे सामने लाएं)।

    उदाहरण :

       5 4 3 2 1 0 3p
    == 5 4 2 1 0 3
    
  • n d

    स्टैक से n मान छोड़ें। 0dएक सेशन नहीं है

    उदाहरण :

       5 4 3 2 1 0 3d
    == 5 4 3
    

संबंधपरक संकारक

  • ab (on_true) (on_false) =

    परीक्षण यदि एक बराबर बी। सभी लेकिन पहले तर्क का उपभोग करें, और on_true या on_false पर कॉल करें। यदि एक तर्क शून्य है और दूसरा किसी अन्य प्रकार का है, तो परिणाम गलत होगा। अन्यथा, ए और बी पूर्णांक होना चाहिए।

    उदाहरण :

       3 3 ('0+ .) (1d) =
    == 3 '0+ .
    
  • ab (on_true) (on_false) <

    टेस्ट अगर बी से कम है। a और b पूर्णांक होना चाहिए।

    उदाहरण :

       3 5 (1d 5) () <
    == 3 1d 5
    == 5
    
  • ab (on_true) (on_false) >

    टेस्ट अगर बी से अधिक है। a और b पूर्णांक होना चाहिए।

    उदाहरण :

       3 5 (1d 5) () >
    == 3
    
  • एक लो हाय (on_true) (on_false) ~

    टेस्ट अगर लो <= a <= hi। a, lo और hi पूर्णांक होना चाहिए।

    उदाहरण :

       3 0 10 ('0+ .) (1d) ~
    == 3 '0+ .
    

आई / ओ

  • सी .

    चरित्र सी रखो (स्टैक से भस्म)।

  • ,

    एक चरित्र प्राप्त करें और इसे स्टैक पर धकेलें। यदि फ़ाइल का अंत हो गया है, तो -1 को धकेल दिया जाता है।

  • सी !

    एक चरित्र को भूल जाओ। सी में ungetc की तरह, केवल एक पुशबैक की अनुमति है।

पूर्णांक शाब्दिक

  • 'c

    चरित्र को धक्का दे।

  • [0-9] +

    दशमलव पूर्णांक पुश करें।

अंकगणित

  • अब +
  • अब -
  • अब *

    दो नंबर जोड़ें / घटाएँ / गुणा करें।

    उदाहरण :

       3 5 + 7 3 + *
    == 80
    
  • अब /

  • अब %

    विभाग और मापांक। C के विपरीत, ये नकारात्मक अनंत की ओर गोल हैं।

कई तरह का

  • कोड #टिप्पणी

    #चरित्र पंक्ति के अंत में सब कुछ बाहर टिप्पणी।

  • )

    ब्लॉकों को समाप्त करने के लिए उपयोग किया जाता है। पूरे कार्यक्रम को समाप्त करने के लिए भी इस्तेमाल किया जा सकता है।

  • अन्य सभी पात्रों को अनदेखा किया जाता है।


24

बाइनरी लैम्ब्डा कैलकुलस, 232 बिट्स (29 बाइट्स)

0101000110100000000101011000000000011110000101111110011110000101110011110000001111000010110110111001111100001111100001011110100111010010110011100001101100001011111000011111000011100110111101111100111101110110000110010001101000011010

देखें http://en.wikipedia.org/wiki/Binary_lambda_calculus#Lambda_encoding जानकारी के लिए


2
यह स्वीकृत उत्तर D क्यों नहीं है: BLC आश्चर्यजनक है!
बिल्ली

क्या आप इसे बिल्कुल समझा सकते हैं?
प्युर्लेज़

1
दुर्भाग्य से, विकिपीडिया ने बाइनरी लैम्बडा कैलकुलस पृष्ठ को हटा दिया। मेरा tromp.github.io/cl/cl.html पेज एक संरक्षित प्रतिलिपि के लिए लिंक करता है और एक पेपर में मैंने दुभाषिया के कामकाज को समझाते हुए लिखा है।
जॉन ट्रॉम

13

मैं इसका श्रेय नहीं ले सकता , लेकिन मुझे लगा कि मैं इस अद्भुत चीज़ को साझा करूंगा:

ब्रेनफ *** (423)

>>>+[[-]>>[-]++>+>+++++++[<++++>>++<-]++>>+>+>+++++[>++>++++++<<-]+>>>,<++[[>[
->>]<[>>]<<-]<[<]<+>>[>]>[<+>-[[<+>-]>]<[[[-]<]++<-[<+++++++++>[<->-]>>]>>]]<<
]<]<[[<]>[[>]>>[>>]+[<<]<[<]<+>>-]>[>]+[->>]<<<<[[<<]<[<]+<<[+>+<<-[>-->+<<-[>
+<[>>+<<-]]]>[<+>-]<]++>>-->[>]>>[>>]]<<[>>+<[[<]<]>[[<<]<[<]+[-<+>>-[<<+>++>-
[<->[<<+>>-]]]<[>+<-]>]>[>]>]>[>>]>>]<<[>>+>>+>>]<<[->>>>>>>>]<<[>.>>>>>>>]<<[
>->>>>>]<<[>,>>>]<<[>+>]<<[+<<]<]

10

ब्लॉकस्क्रिप्ट - 535

{[B':=?0:B';=?0:B'}=?0:B'{=?,A!,A!d1c&:B'?=?,A!,A!2e&:B''=?,,A!d3c&:B{[B'0<?0:B
'9>?0:1}!?B'0-{[,g!?c'0-B10*d+A!:Bd]A!d3c&}!:B'#=?{[,10=?,]A!:A!}!:,A!Bb&}{[AC[
B]DB?[AB{[Bh&hbhn!}{[B[AB]C?1-eA!:b}&[C1=?E[C]FHc&B!:C2=?{G?D:E[C}!FHcI!:C3=?E[
C]B!:C'!=?G[ABC]Hc&dbh&D?b@I!B!:b@I!:C'&=?HB!:C'@=?FGDI!:C'[=?GF&HDI!:C']=?F[A]
HDI!:C',=?,B!:C'.=?G.FHDI!:C'a'z{[DC<?0:DB>?0:1}!?Ce-HA!B!:C'A'Ze!?F[B]Cg-dA!B!
:{C'+=?{[CB+}:C'-=?{[CB-}:C'*=?{[CB*}:C'/=?{[CB/}:C'%=?{[CB%}:C'<=?{[CB<}:C'>=?
{[CB>}:C'==?{[CB=}:0}!?H[A][B]Ge!B!:FHDI!:c},c!0ac&0&0&0bho!;

ब्लॉकस्क्रिप्ट एक तुच्छ स्पेगेटी स्टैक- आधारित भाषा है जिसे मैंने विशेष रूप से इस चुनौती के लिए बनाया है। आधार दुभाषिया blockcript.c है

नमूना कार्यक्रम (पहले 15 फाइबोनैचि संख्या प्रिंट करता है):

{[B?B10/A!B10%d&:0}
{[B0<?'-.0B-A!:{B?Bh!{[B?B[A]A!B[B]'0+.:}!:'0.}!10.}
{[B?Dd!DC+B1-CecA!:}
0 1 15d!
;

दुभाषिया उस क्रम में मानक इनपुट से स्रोत कोड और प्रोग्राम इनपुट दोनों को पढ़ता है। इसका मतलब यह है कि एक दुभाषिया के भीतर दुभाषिया चलाने के लिए, दुभाषिया को कॉपी और पेस्ट करें:

# Level 1
{[B':=?0:B';=?0:B'}=?0:B'{=?,A!,A!d1c&:B'?=?,A!,A!2e&:B''=?,,A!d3c&:B{[B'0<?0:B
'9>?0:1}!?B'0-{[,g!?c'0-B10*d+A!:Bd]A!d3c&}!:B'#=?{[,10=?,]A!:A!}!:,A!Bb&}{[AC[
B]DB?[AB{[Bh&hbhn!}{[B[AB]C?1-eA!:b}&[C1=?E[C]FHc&B!:C2=?{G?D:E[C}!FHcI!:C3=?E[
C]B!:C'!=?G[ABC]Hc&dbh&D?b@I!B!:b@I!:C'&=?HB!:C'@=?FGDI!:C'[=?GF&HDI!:C']=?F[A]
HDI!:C',=?,B!:C'.=?G.FHDI!:C'a'z{[DC<?0:DB>?0:1}!?Ce-HA!B!:C'A'Ze!?F[B]Cg-dA!B!
:{C'+=?{[CB+}:C'-=?{[CB-}:C'*=?{[CB*}:C'/=?{[CB/}:C'%=?{[CB%}:C'<=?{[CB<}:C'>=?
{[CB>}:C'==?{[CB=}:0}!?H[A][B]Ge!B!:FHDI!:c},c!0ac&0&0&0bho!;

# Level 2
{[B':=?0:B';=?0:B'}=?0:B'{=?,A!,A!d1c&:B'?=?,A!,A!2e&:B''=?,,A!d3c&:B{[B'0<?0:B
'9>?0:1}!?B'0-{[,g!?c'0-B10*d+A!:Bd]A!d3c&}!:B'#=?{[,10=?,]A!:A!}!:,A!Bb&}{[AC[
B]DB?[AB{[Bh&hbhn!}{[B[AB]C?1-eA!:b}&[C1=?E[C]FHc&B!:C2=?{G?D:E[C}!FHcI!:C3=?E[
C]B!:C'!=?G[ABC]Hc&dbh&D?b@I!B!:b@I!:C'&=?HB!:C'@=?FGDI!:C'[=?GF&HDI!:C']=?F[A]
HDI!:C',=?,B!:C'.=?G.FHDI!:C'a'z{[DC<?0:DB>?0:1}!?Ce-HA!B!:C'A'Ze!?F[B]Cg-dA!B!
:{C'+=?{[CB+}:C'-=?{[CB-}:C'*=?{[CB*}:C'/=?{[CB/}:C'%=?{[CB%}:C'<=?{[CB<}:C'>=?
{[CB>}:C'==?{[CB=}:0}!?H[A][B]Ge!B!:FHDI!:c},c!0ac&0&0&0bho!;

# Level 3
{[B?B10/A!B10%d&:0}
{[B0<?'-.0B-A!:{B?Bh!{[B?B[A]A!B[B]'0+.:}!:'0.}!10.}
{[B?Dd!DC+B1-CecA!:}
0 1 15d!
;

फिल्म इंसेप्शन की तरह , आप तीन स्तरों की तुलना में बहुत गहरे तक नहीं जा सकते। यह समय की बात नहीं है, लेकिन अंतरिक्ष की। ब्लॉकस्क्रिप्ट मेमोरी को गहराई से लीक करता है, और इसके साथ यह करना पड़ता है कि भाषा स्वयं कैसे डिज़ाइन की जाती है।


भाषा संदर्भ:

यहां दुभाषिया प्राप्त करें

ब्लॉकस्क्रिप्ट में, "स्टैक" एक ऐसा सरणी नहीं है जिसे बाद के संचालन द्वारा अधिलेखित किया जाता है जैसे कि आपको उपयोग किया जा सकता है। यह वास्तव में एक अपरिवर्तनीय लिंक्ड सूची के रूप में लागू किया जाता है, और एक स्टैक प्रोग्राम की अवधि के लिए बनी रहती है। इसके अलावा, कोई भी ऑपरेटर (छोड़कर @) स्टैक से मूल्यों को नहीं हटाता है। हालांकि, स्टैक संशोधन केवल उस ब्लॉक को प्रभावित करते हैं जिसमें वे होते हैं।

मान चयन

  • a के माध्यम से z

    स्टैक से 0-25 वां आइटम लाएं, और इसे स्टैक पर धकेल दें। aस्टैक के प्रमुख, या हाल ही में धकेल दिए गए आइटम को संदर्भित करता है।

  • A के माध्यम से Z

    वर्तमान फ्रेम के 0-25 वें आइटम को प्राप्त करें, और इसे स्टैक पर धकेल दें।

  • [

    स्टैक के सिर पर स्टैक संदर्भ (नीचे देखें) से आइटम का चयन करने के लिए एक "फ्रेम" खोलें। [एक मिलान की आवश्यकता नहीं है ], लेकिन फ्रेम को शाब्दिक रूप से स्कूप किया गया है। ब्लॉकस्क्रिप्ट में, "स्कोप" को ब्लॉक बनाने वाले ब्रेसिज़ ( {... }) द्वारा निर्धारित किया जाता है । इस प्रकार, ब्लॉक के अंदर एक फ्रेम खोलने से ब्लॉक के बाहर कोड पर कोई प्रभाव नहीं पड़ेगा।

  • ]

    वर्तमान फ्रेम को बंद करें, पिछले फ्रेम (यदि कोई हो) पर लौट रहा है।

ब्लाकों

  • { ... }

    एक "ब्लॉक" बनाएं, और इसे स्टैक पर धक्का दें। एक ब्लॉक के अंदर, स्टैक उसी पर शुरू होगा, जो ब्लॉक से पहले था, सिवाय इसके कि कॉलर को ऊपर की तरफ धकेल दिया जाएगा। ब्लॉकस्क्रिप्ट में स्टैक्स लगातार और अपरिवर्तनीय होते हैं, इसलिए ब्लॉक क्लोजर होते हैं। मुहावरे का {[अर्थ है एक ब्लॉक खोलें, फिर तर्कों का चयन शुरू करने के लिए एक फ्रेम खोलें (के Aमाध्यम से Z)। एक ब्लॉक का वापसी मूल्य स्टैक का प्रमुख होता }है जब पहुंच जाता है।

    उदाहरण:

    '3 '2 '1 {[ b. d. f. B. C. D. A! } 'D 'C 'B d!;
    

    यह प्रिंट करता है 123BCD123DCB123BCD123DCB…। निचला अक्षर स्टैक मानों को संदर्भित करता है, जबकि अपरकेस अक्षर तर्कों को संदर्भित करता है (क्योंकि फ्रेम कॉलर के ढेर पर सेट होता है)। A!कॉल करने वाले के सिर को ले जाता है (जिसे कॉल किए जाने वाले ब्लॉक होने की गारंटी है) और उसे कॉल करता है। यदि आप सोच रहे हैं कि यह BCDहर दूसरे समय में उलट क्यों होता है , तो ऐसा इसलिए है क्योंकि B. C. D.ब्लॉक में खुद को कॉल करने से ठीक पहले उन तर्कों को रिवर्स ऑर्डर में धकेल दिया जाता है।

  • !

    एक ब्लॉक को बुलाओ। स्टैक पर वापसी मान पुश करें।

ढेर संदर्भ

  • &

    स्टैक संदर्भ बनाएँ, और इसे स्टैक पर धकेलें। इसे "सुपर-कॉन्स" के रूप में सोचें, क्योंकि यह प्रभावी रूप से स्टैक पर प्रत्येक आइटम को लेता है और इसमें से एक "टपल" बनाता है। मुहावरा &[अर्थ यह है कि जो कुछ भी a, b, cसंदर्भित किया जाता से पहले अब से पहुँचा जा सकता है के लिए A, B, C(ब्लॉक के शेष के लिए या जब तक ]का सामना करना पड़ा है)।

    भाग में, क्योंकि &आमतौर पर इसकी आवश्यकता से अधिक मूल्य कैप्चर करते हैं, ब्लॉकस्क्रिप्ट डिज़ाइन द्वारा मेमोरी को लीक करता है।

  • @

    स्टैक संदर्भ द्वारा इंगित स्टैक पर स्विच करें a। यह ऑपरेटर बल्कि अजीब है, लेकिन दो बार एक ही तर्कों को आगे बढ़ाने से बचने के लिए ब्लॉकस्क्रिप्ट सेल्फ-इंटरप्रेटर इसे कुछ बार उपयोग करता है। @(या उस मामले के लिए किसी भी स्टैक ऑपरेशन) के प्रभाव को उस ब्लॉक तक सीमित किया जाता है जिसमें इसे लागू किया जाता है। इसके अलावा, फ्रेम से अप्रभावित है @, इसलिए फ्रेम का उपयोग उन मूल्यों को हथियाने के लिए किया जा सकता है जो आपको स्टैक स्विच करने के बाद की आवश्यकता होती है।

सशर्त अभिव्यक्ति

  • ? सत्य पर : <> असत्य पर>

    सशर्त अभिव्यक्ति, सी। में टर्नरी ऑपरेटर की तरह, यदि aवह "सत्य" है (जो पूर्णांक शून्य के बराबर नहीं है), तो <सत्य पर> करें , अन्यथा <झूठी पर करें

आई / ओ

नोट: इनपुट और आउटपुट UTF-8 में किए गए हैं। एक "वर्ण" एक यूनिकोड इंडेक्स के अनुरूप एक पूर्णांक है।

  • ,

    इनपुट का अगला वर्ण प्राप्त करें, और इसे स्टैक पर धकेलें। यदि इनपुट का अंत हो गया है, तो इसके बजाय -1 पुश करें।

  • .

    स्टैक के सिर पर चरित्र को आउटपुट करें।

पूर्णांक / चरित्र शाब्दिक

नोट: ब्लॉगर और अक्षर ब्लॉकस्क्रिप्ट में समान हैं।

  • 'c

    चरित्र को धक्का दे।

  • [0-9] +

    दशमलव पूर्णांक पुश करें।

अंकगणित

ये ऑपरेटर केवल पूर्णांक मानों पर काम करते हैं।

  • +गणना b+ a(परिणाम को धकेलना, लेकिन मूल्य को त्यागना नहीं)।
  • -गणना b- a
  • *गणना b* a
  • /गणना b/ a(पूर्णांक विभाजन; ऋणात्मक अनंत की ओर गोल)।
  • %गणना b% a(पूर्णांक मापांक; ऋणात्मक अनंत की ओर गोल)।

संबंधपरक संकारक

ये ऑपरेटर केवल पूर्णांक मानों पर काम करते हैं।

  • <अगर bतुलना में कम है a, धक्का 1, और धक्का 0।
  • >
  • =

कई तरह का

  • # लाइन के अंत में टिप्पणी करें
  • कार्यक्रम समाप्त होना चाहिए ;
  • अन्य सभी पात्रों को अनदेखा किया जाता है।

2
मसीह। सीआई की तरह आपने कल्पना को साझा करने की परवाह की?
केसी

@ कैसी: एक संदर्भ जोड़ा गया।
जोए एडम्स

1
क्या आप यह जानने में दिलचस्पी लेंगे कि आप क्या सपना देख रहे हैं? ... स्तर 4. पर
मतीन उल्हाक

3

ज़ोज़ोट्ज़ एलआईएसपी : 414

एक अच्छा ब्लॉक प्राप्त करने के लिए जोड़े गए लाइनफीड की जरूरत नहीं है और न ही गिना जाता है।

((\(E V A L)(E(r)'(())))(\(x e)(?(s x)(V x e)((\(b j)(?(= b ")(a j)(?(= b \)x
(?(= b ?)(?(E(a j)e)(E(a(d j))e)(E(a(d(d j)))e))(?(s b)(A b(E(a j)e)(E(a(d j)
)e))(E(a(d(d b)))(L(a(d b))j e)))))))(E(a x)e)(d x))))(\(x g)(? g(?(= x(a(a
g)))(d(a g))(V x(d g)))x))(\(f h v)(?(= f r)(r)(?(= f p)(p h)(?(= f s)(s h)(?
(= f a)(a h)(?(= f d)(d h)(?(= f =)(= h v)(c h v))))))))(\(k v i)(? k(L(d k)(
d v)(c(c(a k)(E(a v)i))i))i)))

सिद्धांत रूप में यह खुद को चलाने में सक्षम होना चाहिए, लेकिन चूंकि मूल दुभाषिया एक ब्रेनफैक बाइनरी है और खुद एक दुभाषिया है, जो मैं केवल प्रत्येक भाग का परीक्षण करने में सक्षम हूं। जब खुद को और एक सरल अभिव्यक्ति दी जाती है, तो (p p)मुझे लगता है कि इसे अब तक इंतजार किए गए 40 मिनट से अधिक समय की आवश्यकता है और मैं jitbfइसे चलाने के लिए अपने तेज का उपयोग कर रहा हूं जो (गलत) फ्लाई पर सी कोड चलाने के लिए पर्ल इनलाइन-सी का उपयोग करता है।

ज़ोज़ोटोज़ में पूरे ज़ोज़ोटोज़ को लागू करना असंभव है, क्योंकि इसमें विपक्ष को बदलने के साधन नहीं हैं और :(सेट / परिभाषित) को बाइंडिंग को अपडेट करने की आवश्यकता है। मैंने स्पष्ट शुरुआत / प्रस्तावना या बाकी तर्क, मैक्रोज़ और विशेष मुद्रण तर्क को लागू नहीं किया था क्योंकि मैंने दुभाषिया में इसका उपयोग नहीं किया था। मैंने इसमें शामिल p(प्रिंट) किया था, हालांकि मैं इसका उपयोग नहीं करता हूं, इसलिए कार्यक्रमों को मूल दुभाषिया की तरह अपनी गणना को स्पष्ट रूप से प्रिंट करने की आवश्यकता है।

वही अपराजित:

;; A stand alone Zozotez script need to be
;; contained in one expression, here with
;; all functions provided as arguments to
;; get them bound in the dynamic environment
((\ (E V A L)
  (E(r)'(())))
 ;; E (EVAL)
 (\ (x e)
   (? (s x)
      (V x e)
      ((\ (b j)
         (? (= b ") (a j)
         (? (= b \) x
         (? (= b ?) (? (E(a j)e) (E(a(d j))e) (E(a(d(d j)))e))
         (? (s b)
            (A b (E(a j)e) (E (a(d j))e))
            (E (a(d(d b))) (L(a(d b))j e)))))))
       (E (a x) e)(d x))))
 ;; V (VALUE / symbol->value)
 (\ (x g)
   (? g
      (? (= x (a (a g)))
         (d (a g))
         (V x (d g)))
      x))
 ;; A (APPLY) but just for primitives
 (\ (f h v)
   (? (= f r) (r)
   (? (= f p) (p h)
   (? (= f s) (s h)
   (? (= f a) (a h)
   (? (= f d) (d h)
   (? (= f =)
      (= h v)
      (c h v))))))))
 ;; L ( joint evLis / extend-env)
 (\ (k v i)
   (? k
      (L (d k) 
         (d v)
     (c (c (a k) 
           (E (a v) i)) 
        i))
      i)))

0

CHIQRSX9 + (शायद गैर-प्रतिस्पर्धात्मक), 2 बाइट्स

+I

इस HQ9 + -बेड भाषा में सेल्फ-इंटरप्रेटिंग इंटरप्रेटर लिखने का कोई तरीका नहीं है बिना उपयोग किए I, जो एक अंतर्निहित दुभाषिया है जो STDIN को प्रोसेस करता है।


1
नियमों में कहीं भी यह नहीं कहा गया है कि अंतर्निहित स्व दुभाषियों को रोक दिया गया है। यह कहता है eval, जो भावों के लिए है, कार्यक्रमों के लिए नहीं।
आउटगॉल्फ

इस भाषा में कोई कैसे गणना करता है?
13:13 बजे पपीरी

@ppperry Xको कार्यान्वयन-निर्भर तरीके से भाषा को ट्यूरिंग-पूर्ण (इस प्रकार primes की गणना करने में सक्षम) बनाने के लिए माना जाता है।
user8397947

Esolang पृष्ठ के लिए रिकॉर्डिंग, पर्ल दुभाषिया की Xकमान यादृच्छिक रूप से प्रोग्राम को गड़बड़ा देती है और इसे निष्पादित करती है, जिसका अर्थ है कि कोई भी कमांड का उपयोग करने के लिए नियत रूप से गणना नहीं कर सकता है। क्या आप मुझे एक उदाहरण दुभाषिया दे सकते हैं जो Xआपको निर्दिष्ट तरीके से उपयोग करने देता है ?
20

@ एपर्पी स्पष्ट रूप से पर्ल में लिखा गया दुभाषिया एकमात्र दुभाषिया है, इसलिए नहीं। इसके अलावा, क्या होगा अगर एक प्रोग्राम है जो एक विशिष्ट मूल्य के साथ "यादृच्छिक" होने पर primes की गणना करता है?
user8397947

0

समवर्ती फाइल सिस्टम 98 - 53 \ 18 बाइट्स (लगभग निश्चित रूप से धोखा)

पूर्ण 53 बाइट दुभाषिया जिसमें कोई प्रतिबंध नहीं है (हालाँकि मैंने आईपी विभाजन और रैपिंग से जुड़े जटिल समयांतराल परीक्षण नहीं किए हैं):

v ;;;;;;;;
>]390'ai@
 t;;;;;;;;
;>zzzzz#;

नामक फ़ाइल से इनपुट पढ़ता है aऔर इसे निष्पादित करता है। यह नियमों में निर्दिष्ट नहीं है कि हम स्व-संशोधित कोड का उपयोग नहीं कर सकते हैं।

18 बाइट दुभाषिया जो रैपिंग की अनुमति नहीं देता है (कोड के एक किनारे का आईपी हिलना और विपरीत किनारे पर शुरू करना):

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