হাস্কেলের তালিকাগুলির সাথে "@" প্রতীকটির অর্থ কী?


127

আমি হাস্কেল কোডের এক টুকরো জুড়ে এসেছি যা দেখতে দেখতে এটি:

ps@(p:pt)

@এই প্রসঙ্গে প্রতীকটির অর্থ কী ? আমি গুগলে কোনও তথ্য খুঁজে পাচ্ছি না (গুগলে প্রতীকগুলি অনুসন্ধান করা দুর্ভাগ্যজনকভাবে), এবং আমি প্রিলিওড ডকুমেন্টেশনে ফাংশনটি খুঁজে পাচ্ছি না, সুতরাং আমি ভাবছি এটির পরিবর্তে এটি অবশ্যই একরকম সিনট্যাকটিক চিনির হতে হবে।


14
নির্দিষ্ট চিহ্নটির সন্ধান করার চেষ্টা করবেন না। সাধারণভাবে হাস্কেল সিনট্যাক্স অনুসন্ধান করুন এবং তারপরে সামগ্রিক আলোচনায় প্রতীকটি সন্ধান করুন। উদাহরণস্বরূপ, "হাস্কেল সিনট্যাক্স" এর জন্য শীর্ষ গুগলের ফলাফল: cs.utep.edu/cheon/cs3360/pages/haskell-syntax.html@এই পৃষ্ঠাতে দ্বিতীয় ঘটনা এটি ব্যাখ্যা করে।
রব কেনেডি

1
ভাল জিনিস আমি কীভাবে এই URL টি পেয়েছি ঠিক তা উল্লেখ করেছি, @ ইটার। যে কেউ আজ প্রক্রিয়াটির পুনরাবৃত্তি করতে পারেন এবং যে পৃষ্ঠাতে তারা খুঁজে পান তার উত্তর খুঁজে পেতে পারেন।
রব কেনেডি

উত্তর:


179

হ্যাঁ, এটি কেবল সিনট্যাকটিক চিনির সাথে @উচ্চস্বরে "হিসাবে" পড়ুন। ps@(p:pt)আপনাকে নাম দেয়

  1. ক্রমতালিকা: ps
  2. তালিকার প্রধান: p
  3. তালিকার লেজ: pt

ছাড়া @, আপনাকে (1) বা (2) :( 3) এর মধ্যে বেছে নিতে হবে।

এই বাক্য গঠনটি যে কোনও নির্মাণকারীর পক্ষে কাজ করে; যদি আপনার data Tree a = Tree a [Tree a]হয়, তাহলে t@(Tree _ kids)আপনি উভয় গাছ এবং তার শিশুদের অ্যাক্সেস দেয়।


3
আপনি কি এই সিনট্যাক্সের নাম জানেন?
ডানজা

7
একে একটি "হিসাবে-প্যাটার্ন" বলা হয়
এডামো

41

@সাংকেতিক উভয় ব্যবহার করা হয় একটি প্যারামিটার একটি নাম দিতে হবে এবং একটি প্যাটার্ন যে অনুসরণ করে বিরুদ্ধে যে পরামিতি মেলে @। এটি তালিকার সাথে নির্দিষ্ট নয় এবং অন্যান্য ডেটা স্ট্রাকচারের সাথেও এটি ব্যবহার করা যেতে পারে।

এটি যদি আপনার ফাংশনের কোথাও কোথাও পুরো পরামিতিটির প্রয়োজন পরে আপনি যদি তার পরামিতিগুলির অংশগুলিতে "পচন" করতে চান তবে এটি কার্যকর। এই ক্ষেত্রে এটির একটি উদাহরণ হ'ল tailsস্ট্যান্ডার্ড লাইব্রেরির ফাংশন:

tails                   :: [a] -> [[a]]
tails []                =  [[]]
tails xxs@(_:xs)        =  xxs : tails xs

21

আমি যুক্ত করতে চাই @যা সর্বস্তরে কাজ করে, এর অর্থ আপনি এটি করতে পারেন:

let a @ (b @ (Just c), Just d) = (Just 1, Just 2) in (a, b, c, d)

যা তখন এটি উত্পাদন করবে: ((Just 1, Just 2), Just 1, 1, 2)

সুতরাং মূলত এটি আপনার জন্য একটি মূল্যকে কোনও প্যাটার্ন বেঁধে রাখার একটি উপায়। এর অর্থ এটিও যে এটি উপরে প্রদর্শিত হিসাবে কেবল তালিকা নয়, কোনও ধরণের প্যাটার্ন নিয়ে কাজ করে । এটি জানার জন্য খুব দরকারী জিনিস, কারণ এর অর্থ আপনি আরও অনেক ক্ষেত্রে এটি ব্যবহার করতে পারেন।

এই ক্ষেত্রে, aসমগ্র হয় Maybe Tuple, bশুধু প্রথম Justtuple, এবং cএবং dমান প্রথম এবং দ্বিতীয় অন্তর্ভুক্ত করা হয় Justtuple যথাক্রমে


9

অন্যান্য লোকেরা যা বলেছেন তাতে যুক্ত করতে, তাদেরকে নমুনা হিসাবে বলা হয় (এমএলে সিনট্যাক্স "" হিসাবে "কীওয়ার্ডটি ব্যবহার করে), এবং নিদর্শনগুলির উপর হাস্কেল রিপোর্টের বিভাগে বর্ণিত হয় ।

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