গল্ফস্ক্রিপ্টের একটি উন্নত সংস্করণ [বন্ধ]


12

আমি আরও সংক্ষিপ্ত প্রোগ্রামগুলির জন্য আরও উন্নত গল্ফস্ক্রিপ্ট লেখার পরিকল্পনা করছি যা আরও বেশি কিছু করতে পারে। এটি কোনও চ্যালেঞ্জ নয়; এটি আমার কী করা উচিত তার প্রতিক্রিয়া এবং টিপসের অনুরোধ। (ট্যাগ দেখুন)

আমি নিশ্চিত নই যে এটি সম্প্রদায়ের উইকি হওয়া উচিত। যদি আপনি এমনটি মনে করেন তবে কেবল একজন মডারেটরের পক্ষে এটি রূপান্তর করার জন্য পতাকাঙ্কিত করুন :)

এই ভাষাটি গল্ফস্ক্রিপ্টের সাথে খুব মিল থাকবে। এটি এখনও রুবিতে লেখা আছে। তবে এর কয়েকটি পার্থক্য রয়েছে:

  • `স্ট্রিং ডিলিমিটার হিসাবে ব্যবহার করা, কারণ এটি একটি অস্বাভাবিক চরিত্র, তাই কম পালানোর প্রয়োজন হবে। (অন্য একটি চরিত্র তার ফাংশনটি প্রতিস্থাপন করতে পারে #( যেমন আরও পরে))। \`ব্যাকটিক \\থেকে বাঁচতে, ব্যাকস্ল্যাশ থেকে বাঁচতে, এবং অন্য কোনও পালানোর অনুক্রম নেই। আপনার যদি একটি নতুন লাইনের প্রয়োজন হয় তবে কেবল স্ট্রিংয়ের মধ্যে একটি আসল আক্ষরিক নিউলাইনটি আটকে দিন।
  • Rationalগল্ফস্ক্রিপ্টের অন্যতম প্রধান ত্রুটিগুলির মধ্যে নির্বিচারে নির্ভুলতা ভাসমান পয়েন্টের জন্য রুবির গুলি ব্যবহার করা।
  • প্রকারকে অন্য ধরণের রূপান্তর করার ক্ষমতা। উদাহরণস্বরূপ, আপনি একটি ব্লকে একটি স্ট্রিতে রূপান্তর করতে পারেন।
  • নিয়মিত অভিব্যক্তি. সম্ভবত সঙ্গে তৈরি "..."। অপারেটরগুলি তাদের জন্যও ওভারলোড হবে। উদাহরণস্বরূপ "\W"~{`Invalid: non-word character`}{`OK`}if,। ব্লকের মতো চলক থেকে চাপলে স্বয়ংক্রিয়ভাবে কার্যকর হবে।
  • ফাইল এবং তারিখের অবজেক্টস, এমন আরও বেশি জিনিসগুলি করতে যা গল্ফস্ক্রিপ্টে অসম্ভব ছিল। এগুলির অক্ষরে অক্ষর থাকবে না, তবে সেগুলি সূচনা করার জন্য ফাংশন থাকবে যেমন `file.txt`fl(ফাইল তৈরির ফাংশনের নাম পরিবর্তন হতে পারে)।
  • হ্যাশ হতে পারে, তবে আমি এটির বিষয়ে নিশ্চিত নই। আমি কি?
  • আরও কিছু করতে সহায়ক ফাংশন। উদাহরণস্বরূপ, `http://example.com`netনেটওয়ার্ক অ্যাক্সেসের জন্য (আবার, netঅপারেটরের নাম পরিবর্তন করা যেতে পারে)। rbরুবি কোড হিসাবে একটি স্ট্রিং কার্যকর করতে। এর মধ্যে আরও অনেক কিছু থাকবে; পরামর্শ স্বাগত।
  • কোনও মন্তব্য নেই, যাতে এটি #অন্য কোনও কিছুর জন্য ব্যবহার করা যায়। আপনি যদি একটি মন্তব্য চান, `comment here`;ভাল কাজ করবে। (সম্ভবত এটির কার্যকারিতা #প্রতিস্থাপন করতে পারে `)
  • এটি সম্পূর্ণরূপে এমনভাবে পুনর্লিখন করা হবে যাতে ফাংশন যুক্ত করা আরও সহজ হবে। মূলত, কোডটি আরও পঠনযোগ্য হবে। (আপনি কি গল্ফস্ক্রিপ্ট উত্স দেখেছেন? :/)
  • এটি গিথুবে থাকবে যাতে এটির সাথে যৌথভাবে কাজ করা যায়। আমি এটি এমআইটি বা অন্য কিছুতে লাইসেন্স করব।
  • কোনও চূড়ান্ত নিউলাইন নয়, সুতরাং প্রতারণামূলক কুইনের কাজ: পি

এবং আমি এগুলি আলাদা করে দিচ্ছি কারণ আমি মনে করি এগুলি সবচেয়ে কঠোর এবং সহায়ক পরিবর্তন (সম্ভবত ভাসমান পয়েন্ট যোগ করা ব্যতীত):

  • এটি অন্তর্নির্মিত অনেক রুবি ফাংশন থাকবে। উদাহরণস্বরূপ, shuffle(যার সংক্ষিপ্তসার হতে পারে sf) (পূর্বে 9 টি অক্ষর নেওয়া হয়েছিল ), tr(পূর্বে 14 অক্ষর ), sample( sm, পূর্বে .,rand=), flatten( fl, পূর্বে ???), ইত্যাদি
  • এটি রেবেমুর মতো ছাঁটাই করা হবে। উদাহরণস্বরূপ, এখন আপনি (বাছাই ফাংশন ওভাররাইট করা ~:a0<{0a-}aIF) পরিবর্তে ~:$0<{0$-}$if( একটি বর্ণের পরিবর্তনশীল নাম ব্যবহার করে) করতে পারেন। (উদাহরণ এখান থেকে )। মনে রাখবেন যে এইভাবে, এটি কেস-সংবেদনশীল এবং সংখ্যা পরিবর্তনশীল নামে অনুমোদিত নয়। এটি আমার মতামত অনুসারে এটি একটি গল্ফ ভাষা: পি
  • এটি ডিবাগিং হবে। আমি অ্যারে ডিলিমিটর, উপাদান ডিলিমিটার, ইত্যাদি উল্লেখ করে একটি পতাকা সরবরাহ করার ক্ষমতা যুক্ত করব, প্রোগ্রাম চালানোর পরিবর্তে প্রতিটি টোকেন টোকেনাইজিং এবং আউটপুট আউট করে একবারে নির্দেশাবলীর মাধ্যমে পদক্ষেপ (যুক্তিসঙ্গত, ভাসমান বা int?), প্রভৃতি

সুতরাং, আমার প্রশ্ন: উন্নতির কী আছে? আমার কী যুক্ত করা উচিত বলে আপনি মনে করেন?

এর জন্য অন্য কোনও ধারণা, আমি কোডিং শুরু করার আগে?


বুঝতে পারছেন না যে আপনি মাশিং যোগ করলে আপনি কেস সংবেদনশীলতা হারাবেন।
মেরিনাস

@ মারিনাস আমি বুঝতে পারি আমার এটা পরিষ্কার করা উচিত ছিল; সম্পাদনা ...
ডুরকনব

এছাড়াও এটির যা প্রয়োজন তা হ'ল সুস্পষ্ট আই / ও করার উপায় (ইন্টারেক্টিভ প্রোগ্রামগুলির জন্য)। প্রোগ্রামটি স্পষ্টত I / O ব্যবহার করে কিনা এবং দোভাষী আগেই যাচাই করতে পারেন এবং যদি তা না করে তবেই কেবল অন্তর্নিহিত I / O করতে পারেন।
মেরিনাস

@ মারিনাস গ্রেট, আপনার তখন উত্তর হিসাবে যুক্ত করা উচিত :)
ডোরকনব

1
@ ক্লাডিউ আমার নতুন ভাষায় আমার বিকাশ বেশ সজীব, যদিও আমি সম্প্রতি বেশ ব্যস্ত হয়েছি তাই আমি কিছুক্ষণের জন্য এটির সাথে খুব বেশি কিছু করতে পারি নি। এর মধ্যে কয়েকটি ধারনা যদিও ভাল ধারণাগুলি নয়, যা আমি ব্যবহার করছি না: পি
ডোরকনব

উত্তর:


17

নমনীয় I / O

গল্ফস্ক্রিপ্ট বর্তমানে ইন্টারেক্টিভ প্রোগ্রামগুলির জন্য ব্যবহার করা যাবে না। আমি সুস্পষ্ট ইনপুট জন্য কিছু ফাংশন যুক্ত করার প্রস্তাব (যেমন readline, getcharএবং বন্ধুরা)। দোভাষীকে দেখতে হবে যে প্রোগ্রামটি চালানোর আগে এগুলি ব্যবহার করে।

প্রোগ্রামটি যদি কোনও ইনপুট ফাংশন না কল করে, দোভাষীর গল্ফস্ক্রিপ্টের মতো কাজ করা উচিত।

আমি দোভাষীটি রানটাইমের সময় উত্পন্ন কোড হিসাবে ইনপুট ফাংশন সনাক্ত করার আশা করবো না, তবে এটি যদি কোনওভাবে এটি করতে পারে তবে, কুডোস।


এটি একটি মহান ধারণা; সীমিত আইও গল্ফস্ক্রিপ্টের বৃহত সীমাবদ্ধতার মধ্যে একটি। +1
ডোরকনবব

11

সংক্ষিপ্ত বিল্ট-ইনগুলি

সমস্ত অন্তর্নির্মিত কমান্ডগুলির জন্য যা একক অক্ষর নয় তার একক অক্ষর i আমি baseযদি এটি ঠিক থাকতাম তবে আরও অনেক কিছু ব্যবহার করতাম B


তবে আপনি যদি bভেরিয়েবল নাম হিসাবে ব্যবহার করেন? এখনও; ভাল ধারণা; আপনি কেবল মনে রাখবেন যে আপনি যদি এই ফাংশনটি ব্যবহার করতে চলেছেন তবে নামটি ব্যবহার করবেন না, এবং আপনি যদি ফাংশনটি ব্যবহার করছেন না, তবে এটি আপনাকে কোনও প্রভাব ফেলবে না।
ডুরকনব

@ ডুরকনোবোফস্নো, আপনি ইতিমধ্যে বিল্ট-ইনগুলি (এবং এমনকি টোকেন যেমন ^বা $হিসাবে) পরিবর্তনশীল নাম হিসাবে ব্যবহার করতে পারেন । এটি সমস্যাটিকে আরও খারাপ করে না। তদুপরি, আমি পূর্বের দিকের সামঞ্জস্যতা মঞ্জুর করার জন্য ডাকনামগুলির পরামর্শ দিয়েছিলাম, তাই যদি আপনি সংক্ষিপ্ত ওরফে অন্য কিছু বরাদ্দ করেন তবে আপনাকে দীর্ঘ নামটি ব্যবহার করতে হবে।
পিটার টেলর

4
Zজন্য zipখুব দরকারী হবে।
হাওয়ার্ড

হতে পারে আমরা গল্ফস্ক্রিপ্টের জন্য একটি অফিসিয়াল স্ট্যান্ডার্ড লাইব্রেরি প্রকাশ করতে পারি। তবে কীভাবে এটি সমাধানগুলিতে অন্তর্ভুক্ত করা যায় (নিখোঁজ #includeএবং "#{IO.read'lib'}"~খুব দীর্ঘ) এটি সম্পর্কে আমি অস্পষ্ট ।
হাওয়ার্ড

@ হওয়ার্ড এখন এটি একটি ধারণা ... আমি আমার ভাষায় গ্রন্থাগারগুলি যুক্ত করতে পারতাম, পছন্দ করতে পারে mylang -Llibname somefile.ext
ডুরকনব

9

সংযুক্ত ডিভ-মোড

এটি কিছু পরামর্শের তুলনায় কিছুটা কুলুঙ্গিক, তবে সংখ্যা-তাত্ত্বিক প্রোগ্রামগুলিতে কাজ করার সময় আমি প্রায়শই নিজেকে অপারেশন করতে চাই যা দুটি পূর্ণসংখ্যা পপ করে aএবং bস্ট্যাক এবং পুশ করে a/bএবং থেকে a%b। (বর্তমানে এটি হয় 1$1$/@@%)


যেহেতু এটি এত কুলুঙ্গি, তাই সম্ভবত dvmডিভি-মোডের মতো কিছু । সমস্ত ধারণার জন্য ধন্যবাদ :-) +1
ডোরকনব

8

নাম্বার

লিক্সারটি এমন পরিবর্তন করুন যে 0 টি শীর্ষস্থানীয় হয় এমন কোনও সংখ্যার অংশ নয়:

# current behaviour
01     # -> 1

# new
01     # -> 0 1

এর _পরিবর্তে নেতিবাচক সংখ্যাগুলিও লিখতে হবে:

# current behaviour
1 2-3   # -> -1 3

# new
1 2_3     # -> 1 2 -3

বাহ, এটি আকর্ষণীয়। সাধারণত আপনি একটি সারিতে সাধারণত দুটি সংখ্যার দিকে ধাক্কা দেন না, তবে এটি এতে প্রচুর পরিমাণে সহায়তা করবে। নেতিবাচক জিনিসটি দুর্দান্ত, 0 100-নেতিবাচক 100 এর পরিবর্তেও । +1
ডুরকনব

1
আমি এই সম্পর্কে আগে চিন্তা করেছি। নেতিবাচক পূর্ণসংখ্যার আক্ষরিক জন্য কোনও সমর্থন থাকা উচিত নয়। এটা ইতিমধ্যেই দ্বারা পরিচালিত হচ্ছে ~। যেমন -1 হয় 0~। এটি একটি চরের দ্বারা অল্প সংখ্যক সংখ্যা দীর্ঘ করে দেয় তবে পরে সাদা অংশের জন্য মাঝারিভাবে ঘন ঘন প্রয়োজনকে সরিয়ে দেয় -
পিটার টেলর

এক মিনিট অপেক্ষা করুন, আপনি কীভাবে ধাক্কা দেবেন, উদাহরণস্বরূপ, 1001? আমি মনে করি আপনি শূন্যের নেতৃত্ব বলতে চেয়েছিলেন, পিছনে নয়।
ডোরকনবব

পুনঃটুইট করুন
হাওয়ার্ড

আপনি কী করবেন {0\-}:~;( ~এক নম্বর নেতিবাচক-আকার) এবং notবিটওয়াইসের জন্য (ঠিক যেমন and or xor) ব্যবহার সম্পর্কে কী ভাববেন ?
Doorknob

8

পুরো স্ট্যাক অ্যাক্সেস

গল্ফস্ক্রিপ্ট একটি স্ট্যাক-ভিত্তিক ভাষা, তবে স্ট্যাকের শীর্ষ তিনটি আইটেম ব্যতীত সকলের অ্যাক্সেস <integer>$নবম আইটেমটি অনুলিপি করতে সীমাবদ্ধ । পোস্টস্ক্রিপ্টের rollকমান্ডের মতো এমন কিছু থাকা কার্যকর হবে যাতে তিনটির বেশি "লাইভ" ভেরিয়েবলের সাথে কাজ করা আরও সহজ।

আদর্শভাবে সেখানে একটি-আরগ এবং দ্বি-আরগ সংস্করণ থাকবে, তবে আশেপাশে পর্যাপ্ত নাম না থাকলে ওয়ান-আরগের একটি এক-চরিত্রের জন্য পছন্দ হওয়া উচিত।

এক-আরগটি কেবল আইটেমের ঘূর্ণায়মান সংখ্যা নেয়। যেমন 1 rollকিছুই করে না; 2 rollসমান \; 3 rollসমান @; 4 rollএবং উচ্চতর সংখ্যার জন্য একটি বিদ্যমান সমতুল্য নেই; সবচেয়ে কাছের যেটা সম্ভব তা হ'ল কিছুটা

]-4/()\+\+[]*-1%~

(এবং এটি স্ট্যাকের নির্দিষ্ট অবস্থানগুলিতে অ-ইন্টিজারগুলি পরিচালনা করে না, বা সক্রিয় করে [এবং প্রায় অবশ্যই লুপগুলির ভিতরেও বিরতি দেয়)।

দ্বি-আর্গ একটিও রোল করতে পরিমাণ নেয়; a b roll2সমতূল্য {a roll}b*


তো, রুবির মতো rotate। আপনার এটি সিডব্লিউ উত্তরে সম্পাদনা করা উচিত।
ডুরকনব

@ ডুরকনব, না আমি স্ট্যাকের একটি স্লাইসে অপারেটিং সম্পর্কে কথা বলছি, অ্যারেতে নয়।
পিটার টেলর

উম্মম ... আপনারা কী বলতে চাইছেন তা আমি নিশ্চিত নই। আমি পোস্টস্ক্রিপ্টের সাথে পরিচিত নই, তবে rollঠিক অ্যারেটি ঘোরাচ্ছি, তাই না?
ডুরকনব

@DoorknobofSnow, স্ট্যাক । একটি অ্যারে একটি আইটেম যা স্ট্যাকের উপর যায়।
পিটার টেলর

ওহ, সুতরাং এটি পুরো স্ট্যাকটি ঘোরে । আহ, এটি দরকারী হতে পারে! +1
ডোরকনবব

8

CJam

আমি "একটি উন্নত গল্ফস্ক্রিপ্ট" প্রয়োগ করেছি এবং এটি সিজে্যাম নামে পরিচিত - http://sf.net/p/cjam
এখন দ্বিতীয় প্রকাশে (সংস্করণ 0.6) এটি ইতিমধ্যে আলোচিত বেশিরভাগ বৈশিষ্ট্য না থাকলে এর অনেকগুলি রয়েছে। আমি তাদের তালিকা করার চেষ্টা করব:

  • এখনও রুবিতে লেখা - না, জাভা
  • `স্ট্রিং ডিলিমিটার হিসাবে ব্যবহার করে - না, তবে এটি ন্যূনতম পলায়নের সাথে ডাবল-কোটেড স্ট্রিং ব্যবহার করে ( \কেবলমাত্র পালিয়ে যায় \এবং ")
  • ভাসমান পয়েন্ট - সমর্থিত, তবে কেবল স্ট্যান্ডার্ড "ডাবল", নির্বিচারে নির্ভুলতা নয়
  • প্রকারকে অন্য ধরণের রূপান্তর করুন - হ্যাঁ
  • নিয়মিত প্রকাশ - এখনও না, তবে পরিকল্পনা করা হয়েছে; বিশেষ অপারেটরগুলির সাথে নিয়মিত স্ট্রিং ব্যবহার করবে
  • ফাইল এবং তারিখের অবজেক্টস - না, তবে বর্তমান তারিখ / সময় পেতে পারে
  • হ্যাশগুলি - ধরে নিলে সেগুলি পাইথন ডিক্টস বা জাভা মানচিত্রের মতো, তবে সেগুলি সমর্থিত নয় (ভবিষ্যতে বিবেচনা করতে পারে)
  • আরও কিছু করতে সহায়ক ফাংশন - হ্যাঁ, অনেক কিছু
  • `http://example.com`net - "example.com"g
  • রুবি কোড - নোপ হিসাবে একটি স্ট্রিং কার্যকর করুন
  • কোন মন্তব্য নেই - ঠিক, #অন্য কিছুর জন্য ব্যবহৃত,"comments like this";
  • ফাংশন যুক্ত করা সহজ - আমার মনে হয় তবে আমি পক্ষপাতিত্ব :)
  • গিথুব - আরও ভাল (আমার মতে, দয়া করে গুলি করবেন না) - সোর্সফোর্জে, এইচজি ব্যবহার করে
  • এমআইটি-র অধীনে লাইসেন্স প্রাপ্ত - হ্যাঁ
  • কোন চূড়ান্ত নিউলাইন - সঠিক
  • অদলবদল - mr
  • ত্র - er
  • নমুনা - সম্পন্ন হয়নি, _,mr=
  • সমতল - করা হয়নি, তবে সম্ভবত অর্জন করা সহজ
  • ঝাঁকুনি - না, তবে সনাক্তকারীদের আলাদা করার দরকার নেই
  • ডিবাগিং - স্ট্যাকটি edদেখানোর জন্য কেবল স্ট্যাকের চিহ্ন এবং অপারেটর

  • নমনীয় আই / ও - হ্যাঁ, তবে কেবল স্পষ্ট ইনপুট

  • সংক্ষিপ্ত বিল্ট-ইনগুলি - হ্যাঁ, b= বেস, z= জিপ
  • আলাদা লিডিং 0 - না, তবে পূর্বনির্ধারিত ভেরিয়েবলগুলি ব্যবহার করতে পারেন
  • disambiguate -- হ্যাঁ, তবে সাথে নয় _; 1 2-3-> 1 2 -3; 1 2m3->-1 3
  • স্ট্যাক রোল / ঘোরা - না
  • অ্যারে সেট - t
  • বিভাজন - md
  • লেক্সার পরিবর্তন করুন (শনাক্তকারীদের জন্য) - হ্যাঁ, আরও নীচে
  • কার্টেসিয়ান পণ্য - ঠিক একই নয়, তবে হ্যাঁ, m*
  • ইউনিকোড অপারেটর - না
  • একক-অক্ষর সনাক্তকারী - পূর্বনির্ধারিত অপারেটরগুলির 1 বা 2 অক্ষর রয়েছে এবং ভেরিয়েবলগুলি একক-অক্ষর বড় হাতের অক্ষর; এগুলি সমস্ত লেসার / পার্সারকে বিভ্রান্ত না করে সংযুক্ত করা যায়
  • ব্লক অপারেটর - না
  • স্থিতিশীল সাজান - হ্যাঁ
  • প্রতীকগুলি আবার কোড ব্লকে পরিণত করুন - না, তবে এটি পরে যুক্ত করতে পারে
  • বর্তমান তারিখ / সময় - et
  • কমান্ড লাইন আরোগ্স - ea
  • স্পষ্টভাবে বিল্ট-ইনগুলি পৃথক করে - হ্যাঁ, তবে রাজধানীগুলি পরিবর্তনশীল; বিল্ট-ইনগুলি হ'ল বা ছোট হাতের অক্ষর এবং বিশেষ অক্ষর দিয়ে শুরু করুন
  • সর্বনিম্ন ও সর্বোচ্চ - হ্যা, বর্তমানে কেবল 2 মান: e<,e>
  • পরম মান - z(গল্ফস্ক্রিপ্টের absঅভাব নেই)
  • একটি অ্যারের যোগফল এবং পণ্য - :+,:*
  • ম্যানহাটনের দূরত্ব - না
  • chr - c(একটি অক্ষরে রূপান্তরিত হয়, স্ট্রিং নয়)
  • স্ট্যাকের উপর একটি স্ট্রিং ছড়িয়ে দিন - সিজাম স্ট্রিংগুলি অক্ষর দিয়ে তৈরি হয়, সংখ্যা নয়; চরিত্রগুলি স্পিল করার জন্য এটি এখনও রয়েছে{}/
  • এর একটি সংস্করণ :যা সঞ্চিত তা গ্রাস করে - নাহ
  • জন্য অপারেটরদের >=, <=- নাঃ, ব্যবহার <!,>!
  • বেস 64 এবং zlib - না
  • 1 $, 2 $, 3 $, 4 $, 5 for -র জন্য শর্টকাট n
  • শীর্ষ দুটি স্ট্যাক আইটেম অনুলিপি - পরিকল্পনা; এখন ব্যবহারের জন্য1$1$
  • স্থানীয় ভেরিয়েবল - না
  • এইচকিউ 9 + বৈশিষ্ট্য - না, আপনাকে ধন্যবাদ

সিজেমে আরও অনেক বৈশিষ্ট্য রয়েছে, https://sourceforge.net/p/cjam/wiki/Operators/ দেখুন


7
গিটারহাবের চেয়ে সোর্সফর্স এবং মারকুরিয়াল ভাল হওয়ার সাথে আমি একমত নই।
nyuszika7h

1
@ nyuszika7h এটা ঠিক আছে, আমাদের সবার আমাদের পছন্দ আছে
অ্যাডিটসু প্রস্থান করায় এসই ইভিল

আমি সবেমাত্র আমার প্রথম সিজেএম উত্তর পোস্ট করেছি , কারণ আমার গল্ফস্ক্রিপ্ট উত্তরটি সঠিক স্কয়ার্ট ফাংশনটির মরিয়া ছিল। গাজলস্ক্রিপ্টের চেয়ে সিজেএম অনেক দ্রুত!
ডেনিস


@ অ্যাডিটসু আপনি কি সিজেমকে গল্ফস্ক্রিপ্টের একটি উপভাষা বা গল্ফস্ক্রিপ্ট দ্বারা অনুপ্রাণিত কোনও নতুন ভাষা বিবেচনা করবেন? (আমি এখানে জিজ্ঞাসার কারণ: কোডগল্ফ.স্ট্যাকেক্সেঞ্জার / প্রশ্নস / / ques৪64৪ / )
মার্টিন এন্ডার

6

লেক্সার পরিবর্তন করুন

গল্ফস্ক্রিপ্টের লেসার একটি রুবি আইডেন্টিফায়ারকে (যা কিছু রেগেক্সের সাথে মেলে [_a-zA-Z][_a-zA-Z0-9]*) একক টোকেন হিসাবে বিবেচনা করে। পরিবর্তে এটি যদি [a-zA-Z]+একটি টোকেন হিসাবে বিবেচনা করা _হয় যা বিল্ট-ইন হিসাবে মুক্ত হয় এবং শ্বেত স্পেসকে আলাদা না করে কোনও আলফা ভেরিয়েবলকে আক্ষরিক পূর্ণসংখ্যার অনুসরণ করতে দেয়।


ভাল, বর্তমানে আমি [a-z]+|[A-Z]+মুশকির জন্য সহজভাবে ব্যবহার করছি , তাই আন্ডারস্কোরটি বিনামূল্যে। এটি যদিও একটি আকর্ষণীয় এবং খুব অনন্য ধারণা! +1
ডোরকনবব

5

ইউনিকোড এলিয়াস

একাধিক-অক্ষর কমান্ডগুলির ইউনিকোড উপকরণ থাকতে পারে। স্কোরটি বাজে না হয়ে অক্ষরগুলিতে গণনা করা হলে এটি স্কোরকে বাঁচাতে পারে।


7
আহ ... আমরা আর একটি এপিএল চাই না ...
জন ডিভোরাক

1
গল্ফস্ক্রিপ্ট এপিএল, ইউনিকোড বা নং এর মতো কিছু নয়। আমাদের কাছে ইতিমধ্যে জে ও কে এর মতো আরও কয়েকটি এপিএল রয়েছে (বা এমনকি আর যা আমাকে বেশ এপিএল-অনুপ্রাণিত বলে মনে হয় যে আপনি প্রায়শই আক্ষরিক অনুবাদ করতে পারেন)
মেরিনাস

এপিএল সম্পর্কিত স্বতন্ত্র বিষয় হ'ল এটি অন্য যে কোনও কিছুর চেয়ে খুব আলাদা চরসেট ব্যবহার করে, এমন নয় যে এটি ভেক্টর পাটিগণিত স্থানীয়ভাবে ব্যবহার করে। আমি জে পছন্দ করি, আমি এটি ব্যবহার করি এবং আমি জে জবাবগুলিকে সাধারণত উর্ধমুখী করি। আমি এখনও একটি এপিএল উত্তর upvote করতে পারেন । আমি যদি আমার প্রোগ্রামগুলি লেখার পরিবর্তে চিত্র আঁকতে চাইতাম তবে আমি পিট ব্যবহার করতাম।
জন ডিভোরাক

আমি মনে করি এপিএল জে এর চেয়ে আরও সুগঠিত, গল্ফস্ক্রিপ্টের চেয়ে অবশ্যই আরও সুস্পষ্ট ible
মেরিনাস

5

স্থিতিশীল বাছাই

$ব্লক builtin একটি স্থিতিশীল সাজানোর সঞ্চালন করা উচিত নয়।


5

অ্যারে সেট অপারেটর

["A" "B" "C" "D" "E" "F"] -1 4 S    # -> ["A" "B" "C" "D" -1 "F"]

কোনও বিল্ট-ইন আমরা এর জন্য উপলব্ধ করতে পারি?


+1 আমি অ্যারে সেট বাস্তবায়ন সম্পর্কে একটি ব্লগ পোস্ট লিখতে শুরু করেছি, তবে এটি কখনই শেষ হয়নি। এটি সম্পূর্ণ সাধারণতার ক্ষেত্রে বর্তমানে অত্যন্ত কঠিন। এটি কিছু চ্যালেঞ্জের ক্ষেত্রে একটি বড় পার্থক্য আনবে।
পিটার টেলর

আমি বিশ্বাস করতে পারি না এটি ইতিমধ্যে গল্ফস্ক্রিপ্টে অন্তর্নির্মিত নয়। +1
ডোরকনবব

5

একক-চরিত্র সনাক্তকারী

এটি কোনও কোড গল্ফ সমাধানের মতো অনেকগুলি ভেরিয়েবলের মতো নয়। এবং এটি স্পেসে সঞ্চয় করবে।


হুম .. পার্সার পরিবর্তন করে এটিও করা যেতে পারে। এই আচরণটি নির্দিষ্ট করার জন্য সম্ভবত কোনও পতাকা? ভালো বুদ্ধি! +1
ডোরকনবব


3

রেজেক্স সমর্থন

গল্ফিংয়ের জন্য ডিজাইন করা ভাষায় রেজেক্স সহায়তার অভাব আমাকে সর্বদা বিজোড় বলে মনে করেছিল। এটা রাখা দুর্দান্ত হবে

  • <string> <string> <string> y(ওরফে tr, এর জন্য পার্লের ওয়ান-চর ওরফে ব্যবহার করে)
  • <string> <string> <string> s (বিকল্প)
  • <string> <string> <block> s (কলব্যাকের বিকল্প)
  • <string> <string> m (ম্যাচ)

আমি ইতিমধ্যে আমার প্রশ্নের মধ্যে regex উল্লেখ।
ডুরকনব

3

বর্তমান তারিখ / সময়ের জন্য বিল্টিনগুলি

রুবি ইওলস ব্যবহার করে তারিখ / সময় পেতে বর্তমানে এটি খুব স্পর্শকাতর।

D     # -> [2013 12 31]
T     # -> [23 59 59]

এটি কি লিমা বা জুলুতে তারিখ / সময় দেয়?
পিটার টেলর

@ পিটারটেলর জানেন না - সময়গুলি পরিবর্তন হচ্ছে ;-)
হাওয়ার্ড


ওপিতে টাইম টাইপ হিসাবে ইতিমধ্যে উল্লেখ করা হয়েছে।
ডুরকনব

3

| |, এবং এবং ^ বিল্ট-ইনগুলি ব্লকগুলিতে দরকারী কিছু করুন

উদাহরণস্বরূপ <array/string> <block> |সূচক ফাংশন হিসাবে ব্যবহার করা যেতে পারে

[0 -10 -20 30 40 -50 60] {0<} |   # -> [1 2 5]

<array/string> <block> &বা জন্য কোন ধারণা <array/string> <block> ^?


কী array block =চিনলাম না?
জন ডিভোরাক

@ জনডভোরাক তুলনা করুন দরকারী যদি আপনি কোনও ব্লকের সাথে একটি স্ট্রিং তুলনা করতে চান, যেমন "0<" {0<} =
হাওয়ার্ড

আপনার কতবার প্রয়োজন হয়? আমি বরং এটিকে ফেলে দেব এবং array block ="পূর্বনির্ধারিত দ্বারা নির্বাচন করুন"
জন ডিভোরাক

@ জ্যানডভোরাক সিলেক্ট করা প্রিডিট ইতিমধ্যে ব্যবহার করে প্রয়োগ করা হয়েছে ,
হাওয়ার্ড

ওহ কিছু মনে করো না. যান :-)
জন ডিভোরাক

2

প্রতীকগুলি আবার কোড ব্লকে পরিণত করার উপায়

বর্তমানে, আমরা কোডগুলি ব্লকের সাথে প্রতীকগুলিতে আবদ্ধ করতে পারি :, তবে প্রক্রিয়াটি বিপরীত করার কোনও উপায় নেই: একটি কোড ব্লকের সাথে আবদ্ধ একটি চিহ্নকে কার্যকর করা কেবলমাত্র ব্লককে কার্যকর করে।

আমি এটি বাস্তবায়নের কয়েকটি উপায় দেখতে পারি:

  1. নতুন বাক্য গঠন যুক্ত করুন, উদাহরণস্বরূপ স্ট্যাকের #fooমানটি fooচাপানো, এমনকি এটি কোনও কোড ব্লক, বা

  2. একটি কোড ব্লকের প্রতিটি প্রতীক প্রসারিত করতে একটি অপারেটর যুক্ত করুন , যাতে ( _নতুন অপারেটর হিসাবে ব্যবহার করে ), যেমন {2*}:dbl; {dbl dbl}_উত্পাদন করতে পারে {2* 2*}

আমি উভয় পদ্ধতির সুবিধা দেখতে পারি। পরবর্তীটি দুটি অতিরিক্ত অক্ষরের {foo}_পরিবর্তে ( পরিবর্তে #foo) প্রাক্তনটির বিকল্প হতে পারে , তবে আমি পূর্বের বাক্য গঠনটির জন্য কিছু সম্ভাব্য অ্যাপ্লিকেশন দেখতে পাচ্ছি যেখানে এই দুটি অক্ষর নিষিদ্ধ হবে (যেমন array #func %পরিবর্তে ব্যবহার করা array {func} %)।

এদিকে, সাবেক সিনট্যাক্স আধুনিক প্রতিস্থাপন করতে ব্যবহার করা যেতে পারে যদি সেখানে একরকম একটি কোড ব্লক মধ্যে টোকেন (যা তার নিজের উপর দরকারী, যাহাই হউক না কেন হতে পারে) পুনরুক্তি উপর একটি সুবিধাজনক উপায়।


উভয় ক্ষেত্রেই, আমি প্রস্তাব দিচ্ছি যে প্রসারিত প্রতীকগুলি যা দেশি বিল্ট-ইনগুলিতে আবদ্ধ (যেমন রুবি কোডে প্রয়োগ করা হয়েছে) এমন একধরণের স্টাব ফিরিয়ে নেওয়া উচিত যা বিল্ট-ইনটির কার্যকারিতা অর্জনের জন্য বলা যেতে পারে, যদিও অসম্ভব হয়ে পড়েছে being বা ওভাররাইড হওয়ার সম্ভাবনা কম। উদাহরণস্বরূপ #$(বা {$}_) প্রত্যাবর্তন করতে পারে যেমন {builtin_dollar}, যেখানে অন্তর্নির্মিত builtin_dollarপ্রকৃত বাস্তবায়ন থাকবে $(এবং #builtin_dollarবা {builtin_dollar}_কেবল {builtin_dollar}নিজের কাছে ফিরে আসা উচিত )।

এটি বিল্ট-ইনগুলিকে তাদের কার্যকারিতা অ্যাক্সেস না হারিয়ে পুনরায় সংজ্ঞায়িত করার অনুমতি দেবে ( আমার আগের পরামর্শটি দেখুন ), যাতে যদি আমি বলি যে কোনও কারণে যদি আমি এর অর্থগুলি পরিবর্তন করতে চাই $এবং @আমি কেবল #$ #@ :$; :@;(বা {$}_ {@}_ :$; :@;) করতে পারি ।


একটি বিবরণ আমি নিশ্চিত নই _যদি কোড ব্লকে ভেরিয়েবল অ্যাসাইনমেন্ট থাকে তবে অপারেটরটি কী করবে । সুস্পষ্ট বিষয়টি :symbolহ'ল যে কোনও টোকেনকে কোনও ছোঁয়া ছাড়েনি এবং অন্য কোনও কিছু প্রসারিত করা, তবে এটি _স্থানীয় ভেরিয়েবলগুলি ব্যবহার করে যে কোনও কোড ভাঙতে পারে । এটি তৈরি না বিরতি যেমন কোড impractically জটিল হতে পারে, যদিও।
ইলমারি করোনেন

1
আপনার দ্বিতীয় সংস্করণ অ্যারে উপর একটি চেপ্টা অপারেটর সঙ্গে একসঙ্গে মাপসই করা হবে: [[1] [2] [3]] _ -> [1 2 3]
হাওয়ার্ড 18

তাহলে এর ফলাফল কী হবে 2:A;{1:A;A}_?
হাওয়ার্ড 18

অবশ্যই, {1:A;2}(বা, প্রযুক্তিগত হতে {1:A builtin_semicolon 2}যদি বিল্ট-ইন এক্সপেনশন বৈশিষ্ট্যটি অন্তর্ভুক্ত করা হত)। যদি কোনও ধরণের "লোকাল ভেরিয়েবল এক্সক্লুশন" বৈশিষ্ট্য অন্তর্ভুক্ত করা হয়, তবে এটি সম্ভবত নির্দ্বিধায় মূল্যায়ন করতে পারে {1:A;A}
ইলমারি করোনেন

বা আরও প্রযুক্তিগত হতে {builtin_1 :A builtin_semicolon 2}
হাওয়ার্ড 18

1

কমান্ড লাইন আরগগুলির সাথে পরিবর্তনশীল প্রিসেট

দুর্ভাগ্যক্রমে, সেখানে কোন চর নিযুক্ত না করা বাকি আছে, তবে আমরা কি এটির Aজন্য ব্যবহার করতে পারি ?


_সহজলভ্য. সম্ভবত যে? যাইহোক, হ্যাঁ, গল্ফস্ক্রিপ্টের জন্য সিএমডি লাইন আরোগুলি +1 গ্রহণের একটি উপায় দরকার
ডোরকনব

0

নেটিভ রুবি ফাংশন যা আমার কার্যকর করা উচিত

এটি কমিউনিটি উইকি; আপনি যে ফাংশনগুলি মনে করেন আমার বাস্তবায়ন করা উচিত তা নির্দ্বিধায় সম্পাদনা করতে এবং সংযোজন করুন!

ফর্ম্যাট: " nativeFunctionName( nameInMyLanguage)"

  • shuffle( sf)
  • tr( tr)
  • sample( sm)

0

এপিএল এবং এইচকিউ 9 + থেকেও বৈশিষ্ট্যগুলি নিন!

  • শর্টকাটগুলি, এপিএলের মতো। সম্পাদনা: সবেমাত্র উত্তরটি "ইউনিকোড এলিয়াস" দেখেছেন। যে আমি বোঝানো কি :)
  • অন্যান্য গল্ফমুখী শর্টকাটগুলি, যেমন H9 +, এইচকিউ 9 +, CHIQRSX9 +

ঠিক আছে, তাহলে আপনি কীভাবে এটি প্রস্তাব করবেন? কোন নির্দিষ্ট ধারণা?
ডুরকনব

ইউনিকোড অক্ষরগুলি কেবল একটি চরিত্রে জটিল কাজ করতে দেয়।
xem

@ স্নোয়ের ডুরকনব, আমি যে শর্টকাটগুলি দেখতে চাই তার সাথে আমার উত্তর আপডেট করেছি: এপিএল থেকে আসা এবং চিআরকিউএক্সএক্স 9+ এর :)
xem

হুম, hq9 + + জিনিস খুব cheaty :-P বলে মনে হয়
Doorknob

এটি গল্ফমুখী: পি আমার মতে আপনার ভাষা কমপক্ষে পাশাপাশি করা উচিত :)
xem

0

স্পষ্টভাবে বিল্ট-ইনগুলি পৃথক করে

যেমন রাজধানী: অন্তর্নির্মিত; বেস সম্ভাব্য জন্য বি তৈরি


1
উপরে উল্লিখিত হিসাবে পৃথক করার প্রয়োজন নেই। যদি কেউ কোনও বিল্টিনকে ওভাররাইট করতে পছন্দ করে তবে সে তা করতে সক্ষম হবে। এমনকি আমি ওভাররাইটিং অপারেটরগুলির মতো দরকারী অ্যাপ্লিকেশনও পেয়েছি {-}:+
হাওয়ার্ড

কোন প্রয়োজন নেই, এছাড়াও এই ভাষা ক্ষেত্রে সংবেদনশীল হবে।
ডুরকনব

2
যেহেতু লক্ষ্যটি হোল প্রতি কম স্ট্রোক সরবরাহ করা, তাই কেস সংবেদনশীলতা এবং আরও বিল্ট-ইনগুলি কার্যকরভাবে মিশনের বিবৃতিটির দিকে নিয়ে যায়।

0

স্থানীয় ভেরিয়েবল / ক্লোজার্স

গল্ফস্ক্রিপ্টে আমি একটি জিনিস সত্যিই মিস করি তা হ'ল একটি চিহ্নের মান অস্থায়ীভাবে পরিবর্তন করার ক্ষমতা ।

বিশেষত, অন্তর্নির্মিত "আদিম" অর্থটি সাময়িকভাবে ওভাররাইড করার কোনও উপায় নেই: একবার আপনি বলুন, পুনরায় সংজ্ঞা দিন $, আপনি আর কখনও সেই প্রোগ্রামটিতে কিছু সাজানোর চেষ্টা করবেন না। (আচ্ছা, আপনার নিজের সাজানোর প্রয়োগটি কমপক্ষে লিখে না রেখেই করুন না really) উদাহরণস্বরূপ, এই কোড ব্লকের $ অর্থ অন্য কোনও অর্থ, তবে এখনও অন্য কোথাও সাধারণ অর্থ রাখার বিষয়টি বলতে পেরে খুব ভালো লাগবে ।

উপরের সাথে সম্পর্কিত, তাদের বর্তমান মানের সাথে একটি কোড ব্লকে চিহ্নগুলিকে বেঁধে রাখা ভাল হবে । নিশ্চিত, আমি লিখতে পারি বলুন, {$-1%}:rsortএবং ব্যবহার করতে পারবেন rsortসাজাতে এবং একটি অ্যারের বিপরীত, কিন্তু যে কাজ করে শুধুমাত্র সংজ্ঞা যতদিন $(অথবা -1বা %করে না পরিবর্তন, আমার যেহেতু) rsortফাংশন এখনও বিশ্বব্যাপী প্রতীক কল করছে $। এটি বলতে ভাল লাগবে যে " বর্তমানে যা করা হয় rsortতা করা যাক $-1%, যদিও সেই চিহ্নগুলি পরে পুনরায় সংজ্ঞায়িত করা হয়।"

বিশেষত, স্ট্যান্ডার্ড লাইব্রেরি এই ধরণের বাইন্ডিং ব্যবহার করতে পারে। এটি বুঝতে পেরে একপ্রকার অবাক হওয়ার মতো কথা বলা, পরিবর্তনের nফলে তার আচরণের পরিবর্তন হয় putsবা পুনরায় সংজ্ঞাটি !পুরোপুরি গন্ডগোল করে xor। (তারপরেও, এখানে কিছুটা সাবধানতা অবলম্বন করা উচিত, যেহেতু, বিশেষত, putsসক্রিয় আচরণের পরিবর্তন করার ক্ষমতা জিএসের বর্তমান সংস্করণে একটি চূড়ান্ত নিউলাইন মুদ্রণ এড়ানোর একমাত্র উপায় be

সম্পাদনা: প্রতীকগুলি আবার কোড ব্লকে পরিণত করতে সক্ষম হওয়া এই কার্যকারিতাটি বাস্তবায়নের দিকে অনেক বেশি এগিয়ে যাবে। বিশেষত, সেই {foo}_উত্তরে প্রস্তাবিত বাক্য গঠনটি একটি কোড ব্লকের সমস্ত চিহ্নকে প্রসারিত করে কার্যকরভাবে এক স্তরের স্থির বাইন্ডিং সম্পাদন করবে। গভীর স্থিতিশীল বাঁধার জন্য একটি ফিক্সপয়েন্ট সমন্বিত সঙ্গে এটি একত্রিত করুন , এবং বব আপনার মামা ...


আসুন - সমস্ত অভিনব নতুন ভাষা অলস মূল্যায়ন উদযাপন করে ;-) আসুন গল্ফস্ক্রিপ্টে সেই বৈশিষ্ট্যটি রাখি।
হাওয়ার্ড

দ্বিতীয় চিন্তায় - আপনি ঠিক বলেছেন, এটি মূল্যায়নের চেয়ে বাইন্ডিংয়ের বৈশিষ্ট্য। তবে তারপরে - স্ট্যাটিক বাইন্ডিং শোনার চেয়ে জটিল eg যেমন একটি সংজ্ঞায়নের মধ্যে পুনরাবৃত্ত কলগুলি সরবরাহ করে।
হাওয়ার্ড

" এই মুহূর্তগুলিকে পরে কীভাবে নতুন করে সংজ্ঞায়িত করা হয়" বর্তমানে rsortযা করা যায় তা করা যাক $-1%"সুতরাং ইমেন্টাল?
ক্যালকুলেটরফলাইন

0

আরও অন্তর্নির্মিত ফাংশন

সমস্ত একক-বর্ণের ভেরিয়েবলগুলি এজেড এবং এজেডকে কিছু জেনেরিক, দরকারী কার্য সম্পাদন করুন। কিছু বিল্ট-ইনগুলির অভাব রয়েছে:

  • সর্বনিম্ন এবং সর্বাধিক: সমস্ত বা কয়েকটি শীর্ষ 2 স্ট্যাক মান, শীর্ষ এন স্ট্যাক মান, একটি অ্যারের উপরে
  • পরম মান
  • যোগফল এবং একটি অ্যারের পণ্য। {+}*আপনি করতে পারেন যখন কেন S? এখানে কাজ করার জন্য আপনার 52 টি কার্য রয়েছে!
  • ম্যানহাটনের দূরত্ব (অর্থাত্ x1 y1 x2 y2 --> abs(x2-x1)+abs(y2-y1)এখন এটি হতে হবে @-A@@-A+যদি Aকোনও অন্তর্নির্মিত পরম মান হয় ted তবে এটি কেবল আমার সাম্প্রতিক পোস্টের প্রতি সতর্কতা অবলম্বন করেছে তবে আমি সর্বদা অনুভব করেছি যে গল্ফস্ক্রিপ্টকে প্রসারিত করার একটি ভাল উপায়: কী লিখবেন ফাংশনগুলি হ'ল তাদের সংগ্রহ করা এবং বিল্ট-ইন হিসাবে যুক্ত করা সহজ।
  • একটি পূর্ণসংখ্যাকে এক-বর্ণের স্ট্রিং (পাইথনের সমতুল্য chr) তে রূপান্তর করুন ।
  • স্ট্যাকের উপর একটি স্ট্রিং ছড়িয়ে দিন (বর্তমানে {}/)
  • এর একটি সংস্করণ :যা সঞ্চিত তা গ্রাস করে। এটি সনাক্তকারীদের কার্যকর হতে 'আটকে' থাকতে হবে না।
  • অপারেটরদের জন্য >=,<=
  • যেহেতু কেউ পরামর্শ দিয়েছিলেন, কোনও স্ট্রাক কার্যকর না করে স্ট্যাকের মধ্যে একটি ভেরিয়েবল রাখার একটি উপায় a সুতরাং আপনি ফর্ম এর ifs হ্রাস করতে পারে যেমন 1{\}{|}ifকিছু1?\?|if
  • এম্বেডিং ডেটা কম অক্ষর গ্রহণ করতে বেস-ইন বেস 64 রূপান্তর এবং zlib সমর্থন
  • বেস 64 এর বাইরে, কাস্টম বেস93 এনকোডিং করুন (স্ট্রিং ডিলিমিটার নয় এমন সমস্ত মুদ্রণযোগ্য অক্ষর ব্যবহার করে)।
  • শর্টকার্ট 1$, 2$, 3$, 4$,5$
  • শীর্ষস্থানীয় দুটি স্ট্যাক আইটেমগুলি যেমন, তে অনুলিপি করতে কোনও অপারেটর \.@.@\

-3

কোনও ফাংশনের শেষ লাইনে লিখিত বা গণিত মানটি স্বয়ংক্রিয়ভাবে ফিরিয়ে দেওয়া হলে এটি ভালো লাগবে


3
এটি স্ট্যাক-ভিত্তিক, তাই ...
মেরিনাস

1
ফাংশন বলে কোনও জিনিস নেই।
পিটার টেলর

কার্যগুলি কোনও কিছুই ফেরায় না ... এবং তাদের ব্লক বলা হয়
ডোরকনব

এটি অন্য কোনও ভাষায় সুন্দর হতে পারে। (ফাংশন শেষে আর বিরক্তিকর রিটার্নের বিবৃতি নেই! হ্যাঁ! (তবে আমার আর কখনও রিটার্নের স্টেটমেন্টের দরকার নেই, তাই ...))
ক্যালকুলেটরফ্লাইন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.