র‌্যাকেট কীভাবে স্কিমের থেকে আলাদা?


183

র‌্যাকেট স্কিমের বংশধর। কীভাবে র‌্যাকেট আর 6 আরএসের থেকে আলাদা? এটি কী যুক্ত করেছে, বা সরিয়ে নিয়েছে, বা অন্যরকম?

আমি বুঝতে পারি র‌্যাকেট একটি ভাষার চেয়ে বেশি, এটি ভাষার জন্য একটি প্ল্যাটফর্ম। তবে আমি মূল র্যাকেট উপভাষার কথা উল্লেখ করছি।

উত্তর:


131

র‌্যাকেটটি চূড়ান্তভাবে R5RS এর উপর ভিত্তি করে তৈরি করা হয়, এবং আর 6 আরএস নয় এবং উভয়েরই কঠোর সুপারসেট নয়। আমার মনে হয় না যে এটিকে 'স্কিম' বলা যেতে পারে কারণ এটি কোনও স্কিম স্ট্যান্ডার্ডের সাথে পিছনে সামঞ্জস্যপূর্ণ নয়।

বেশিরভাগ বাস্তবায়নগুলি এক্সটেনশানগুলি সরবরাহ করে, তবে অন্যথায় পিছনে সামঞ্জস্যপূর্ণ, অবশ্যই, র‌্যাকেটের সাথে আসা সংকলকটি আর 5 আরএস বা আর 6 আরএস মোডেও চলতে পারে। র্যাকেট মোডে চলমান বৈধ আর 5 / 6আরএস স্কিমটি প্রত্যাখাত হতে পারে, রানটাইম ত্রুটির কারণ হতে পারে বা এর চেয়ে আলাদা আচরণ করতে পারে। এই বলে যে, প্রধান পয়েন্টগুলি যেখানে এটি পিছনে সামঞ্জস্যপূর্ণ নয়:

  • র‌্যাকেটের কোনও set-cdr!এবং নেই set-car!, set-mcar!যা কেবলমাত্র পরিবর্তিত হিসাবে তৈরি বিশেষত জোড়াগুলিতে কাজ করে।
  • যা র‌্যাকেট কল করে letrecতাকে আর letrec*-6আরএস বলা হয় এবং আর 5 আরএস-তে বিদ্যমান নেই, যা র‌্যাকেটে আর 5 আরএস এবং আর 6 আরএস কল letrecবিদ্যমান নেই।
  • র‌্যাকেটে, অনেকগুলি বিষয় স্ব-মূল্যায়ন করছে যা R5RS এ ত্রুটি বাড়িয়ে তুলবে, সর্বাধিক গুরুত্বপূর্ণ খালি তালিকা
  • র‌্যাকেট কেস সংবেদনশীল, যদিও আর S আরএসও কেস সংবেদনশীল
  • র‌্যাকেট আচরণ করে ( ... )এবং [ ... ]সমতুল্য, আর 5 আরএস করে না, তবে আর 6 আরএস করে।

সম্ভবত আরও রয়েছে, তবে বেশিরভাগ অংশে র‌্যাকেট হল স্কিমের সুপারস্টেট।


23
র‌্যাকেটে ()অবৈধ, স্ব-মূল্যায়ন নয়। এছাড়াও, কোলাহল করে আরো সীমাবদ্ধ করেছেন letrec- উদাহরণস্বরূপ, এক r5rsভাষা; এটি letrec*ডিফল্ট ভাষায় পছন্দ মত সংস্করণ ব্যবহার করার জন্য ইচ্ছাকৃত পছন্দ ।
এলি বারজিলে

8
@ এলি, উফফফফ, আপনি ঠিকই বলেছেন, সোয়েন্ডল মোডে চলছে এমন র‌্যাকেট ()নিজেকে মূল্যায়ন করার বিষয়টি বিবেচনা করছে বলে মনে হচ্ছে , আমি সেটার সাথে বিভ্রান্ত ছিলাম। ()যদিও স্কিমটিতে স্ব-মূল্যায়ন করা হচ্ছে না তা বাস্তবে আমি কখনই পাইনি যদিও এটি প্রচলিত লিস্পে রয়েছে।
জোর্ফ

@ জর্ফ এটি ওভারলোডিং দ্বারা সহজেই পরিবর্তন করা যায় #%app, যদিও:#lang racket (require (rename-in racket [#%app old])) (define-syntax #%app (syntax-rules () [(_) '()] [(_ . rest) (old . rest)])) (null? ()) ;; => #t
সুজান ডুপোরন

1
এই উত্তরটি আপডেট করা উচিত। র‌্যাকেটের বৈশিষ্ট্যটি মডিউল এবং ভাষার সংজ্ঞা ইত্যাদির সাথে স্কিমের এখন অনেক বেশি ছাড়িয়ে গেছে
সিঞ্চব্লিউ

@ ভার্মিলিওনজুরি আপনার অর্থ কী, স্ট্যান্ডার্ড স্কিমের কোনও বাস্তব বাস্তবায়নের ফিচার সেটটির মতো?
মালি রিমর্কার

36

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

আমি নিশ্চিত নই যে নাম পরিবর্তনটি বিপণন চালাকি ছাড়া অন্য যে কোনও কিছু হিসাবে কার্যকর ছিল তবে র‌্যাকেট অবশ্যই স্কিমের একটি স্বতন্ত্র উপভাষা।


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

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


17

প্রকল্পের প্রোগ্রামিং ল্যাঙ্গুয়েজে ভাষার স্পেসিফিকেশন আর 5 আরএস একাধিক স্কিম বাস্তবায়নকারীদের মধ্যে সম্মতির ভিত্তিতে। এটি বোঝায় যে ভাষাটি খুব স্থিতিশীল। এটি আরও বোঝায় যে অনেক দরকারী বৈশিষ্ট্যগুলি আর 5 আরএস স্ট্যান্ডার্ডের অংশ নয়।

র‌্যাকেট আর 5 আরএস তৈরি করেছে এবং এটিকে প্রসারিত করেছে। কিছু এক্সটেনশন ম্যাক্রো হিসাবে সংজ্ঞায়িত করা হয়, তবে কিছু বৈশিষ্ট্যের জন্য রানটাইম সিস্টেমের সমর্থন প্রয়োজন।

র‌্যাকেটের বৈশিষ্ট্যগুলি কেবল ম্যাক্রো দ্বারা কার্যকর করা যায় না:

  • সীমাবদ্ধ ধারাবাহিকতা (কল / সিসির চেয়ে বেশি সাধারণ)
  • ধারাবাহিকতা চিহ্ন
  • থ্রেড
  • জায়গা
  • ffi

মডিউল এবং ম্যাক্রো সিস্টেম আরএনআরএস নির্দিষ্টকরণের চেয়ে অনেক বেশি সাধারণ। এক সাথে #langপাঠক / ভাষার স্পেসিফিকেশন কাস্টম ভাষা (কাস্টম সিনট্যাক্স সহ) সংজ্ঞায়িত করা এবং এটিকে সাধারণ র‌্যাকেট প্রোগ্রামগুলির সাথে ব্যবহার করা সম্ভব করে তোলে।

কয়েকটি ক্ষেত্রে র্যাকেটের এমন রচনা রয়েছে যার আচরণগুলি R5RS থেকে বিচ্যুত হয়। সর্বাধিক সুস্পষ্ট একটি consএকটি অপরিবর্তনীয় জুটি ( mconsএকটি পরিবর্তনীয় জুটি তৈরি করে) তৈরি করছে। অপরিবর্তনীয় জোড়া থাকার একটি সুবিধা হ'ল lengthএখন হে (1) মোড়িত সময়ে চালিত হয়।


2
... তবে এটি ও (1) তালিকা সংযোজনকে অসম্ভব করে তোলে।
নেস

16

র‌্যাকেটে "ম্যাচ" এর মতো আর -6 আরএস স্কিমের অন্তর্ভুক্ত নয় এমন অনেকগুলি দুর্দান্ত ভাষা নির্মাণ রয়েছে ।


2
"মিল" কেন একটি দুর্দান্ত বৈশিষ্ট্য হবে? কমপক্ষে, যখন আপনি কোনও মতামত প্রকাশ করেন, আপনার এটির একটি সংক্ষিপ্ত ব্যাখ্যা দেওয়া উচিত, যাতে র‌্যাকেটের সাথে ভালভাবে পরিচিত না লোকেরা বুঝতে পারে যে "ম্যাচ" তাত্ত্বিকভাবে উপকারী কেন।
এনবিরো

1
ফাংশনাল প্রোগ্রামিং ব্যাকগ্রাউন্ড সহ অনেক ভাষাতে প্যাটার্ন ম্যাচিং সত্যই পছন্দসই বৈশিষ্ট্য, দুর্ভাগ্যক্রমে এমনকি R6RS বা সাধারণ লিস্প এটি ডিফল্টরূপে প্রয়োগ করে না, তাই হ্যাঁ এটি একটি সত্যই সুন্দর এবং বিভেদযুক্ত বৈশিষ্ট্য যা র‌্যাকেট সরবরাহ করে। উদাহরণস্বরূপ হাস্কেল, এলিক্সির, মরিচা এবং এফ # এর মতো ভাষাগুলি এই ধরণের নির্মাণ সরবরাহ করে এবং প্রচুর ব্যবহৃত হয়। আমি ব্যক্তিগতভাবে লিস্প প্রোগ্রামিংটি বেশিরভাগ কমন লিস্পে করি এবং বেশিরভাগ ক্ষেত্রেই প্যাটার্ন মিলের বাস্তবায়নের অভাব বোধ করি।
মনোয়েল ভিলালা

matchখুব সুন্দর তবে ভাগ্যক্রমে এটি কেবল একটি ম্যাক্রো যাতে এটি লিপসে সহজেই যুক্ত করা যায় যা এটি নেই। কমন লিস্প এর মাধ্যমে তালিকার সাথে হালকা প্যাটার্ন ম্যাচিং করতে পারে destructuring-bind। এর destructuring-caseউপর ভিত্তি করে ম্যাক্রো লেখা সহজ , এবং অনেকেরই রয়েছে। স্কিমের জন্য পোর্টেবল matchলাইব্রেরি রয়েছে। ক্লোজার আছে core.match
লাসি

ম্যাক্রোগুলি কোড পড়তে কঠোর করতে পারে কারণ তাদের প্রায়শই বিশেষ শব্দার্থবিজ্ঞান থাকে তাই ভাষাটি সর্বদা সমস্ত সাধারণ উদ্দেশ্য ম্যাক্রোকে মানক করে তোলে যাতে প্রত্যেকে তাদের নিজস্ব ম্যাক্রো তৈরি না করে। প্যাটার্ন মিলটি ডিগ্রিটি ঠিক যেমন আর্ক এবং ক্লোজার এবং র‌্যাকেট এবং ওক্যামেল এবং হাস্কেলের মতো হওয়া উচিত কারণ এটি আরও সরাসরি উদ্দেশ্য নির্দিষ্ট করে। ক্যাডার খুব নিম্ন স্তরের।
aoeu256

11

একটি বড় উদাহরণের জন্য, র‍্যাকেট তালিকাগুলি ডিফল্টরূপে অপরিবর্তনীয় এবং স্কিমের পরিবর্তনযোগ্য। র‌্যাকেটে প্রচুর স্ট্যান্ডার্ড লাইব্রেরিও রয়েছে (যেমন ওয়েব সার্ভার) যা অন্যান্য স্কিমগুলি না করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.