হুস্কে গল্ফ করার টিপস


15

হুসি একটি নতুন গল্ফিং ভাষা, এটি পিপিসিজি ব্যবহারকারী লিও এবং জগারব দ্বারা নির্মিত । এটি আরও বেশি প্রতিযোগিতামূলক হয়ে উঠতে শুরু করেছে, প্রায়শই খুব কাছাকাছি থাকা জেলী এবং 05 এএফ 1 ই হিসাবে পরিচিত ভাষা কাছে কাছে বা এমনকি মারধর করে।

আসুন কিছু গল্ফিং কৌশলগুলি তালিকাবদ্ধ করি যা কিছুটা হুসের সাথে নির্দিষ্ট। সর্বদা হিসাবে, দয়া করে উত্তর প্রতি একটি টিপ পোস্ট করুন।



1
@ টোটালিহুমান প্রথম কুপির উত্তর এখনও
ততটা

উত্তর:


10

পূর্বাভাস থেকে রিটার্ন মান ব্যবহার করুন

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

উদাহরণ:

≠  Numbers: Absolute difference
   Chars:   Absolute difference of code points
   Lists:   First Index where the differ

Comparisons <, >, ≤, ≥:

For strict comparisons:
Numbers,Chars:  max 0 (the appropriate difference¹)
Lists: The first index where the comparison between the two lists is true

For non-strict comparisons:
Numbers,Chars: max 0 (the appropriate difference + 1)
Lists: Either the result of the strict comparison or, if they are equal,
       the length of the list + 1

ṗ  Index into the list of prime numbers

V  The index of the first element for which the condition is true

€  The first index of that element/substring in the list

£  Works like €

&  Given two arguments of the same type will return the second argument if false,
   otherwise will return the first argument

|  Given two arguments of the same type will return the second argument if true,
   otherwise will return the first argument

¦  Return the quotient if divisibility holds

Λ,E,Ë  Will all return length+1 in truthy cases

Char predicates:
□,±,√,D,½  will each return the codepoint of its argument on truthy cases

Difference উপযুক্ত পার্থক্য মানে অক্ষরের কোড পয়েন্টের পার্থক্য। এটি যুক্তির আদেশকেও বোঝায়। যেমন <x y, হবেx-y


7

উপচে পড়া লাইনের লেবেলগুলি ব্যবহার করুন

আপনি ইতিমধ্যে জানতে পারেন, [₀-₉]+|[₀-₉]সিনট্যাক্সের জন্য রেজেক্স হ'ল আপনি বর্তমানে যে লাইনে রয়েছেন তার চেয়ে আলাদা লাইন কল করার জন্য।

এই টিপটি বিশেষত কার্যকর যদি আপনি একটি নির্দিষ্ট লাইনে সংজ্ঞায়িত কোনও ফাংশনটি নীচের টেবিলের একাধিক ফাংশনের আর্গুমেন্ট বা নীচে এবং নিজেই এক বা একাধিক ফাংশনের যুক্তি হিসাবে পরিচিত হতে চান।

ফাংশন টেবিল:

+----------+----------+
|Index     |Function  |
+----------+----------+
|1         |´ (argdup)|
+----------+----------+
|2         |` (flip)  |
+----------+----------+
|3         |m (map)   |
+----------+----------+
|4         |z (zip)   |
+----------+----------+
|5         |S (hook)  |
+----------+----------+

আপনার কোডের লাইনগুলি উপরের থেকে নীচে পর্যন্ত তাদের নিজ নিজ 0-ভিত্তিক সূচকগুলির সাথে লেবেলযুক্ত। যদি এম <এন , যেখানে এম হ'ল লেবেল এবং এন আপনার কোডের লাইন সংখ্যা, লেবেল কেবল এম লাইন এম এ সংজ্ঞায়িত ফাংশন প্রতিনিধিত্ব করে । যদি N ≤ M <N * 6 হয় , তবে এটি সূচক ⌊M ÷ N at এর উপরের সারণী থেকে ফাংশনটি তার প্রথম আর্গুমেন্ট হিসাবে লাইন এম মোড এন এ সংজ্ঞায়িত করে যদি N * 6 ≤ M হয় তবে একটি সূচক ত্রুটি উত্থাপিত হয়।


5

ল্যাম্বডাস নতুন ফাংশনগুলির চেয়ে কম হতে পারে

আপনি সম্ভবত জানেন যে আপনার কোনও মাল্টি-লাইন প্রোগ্রাম রয়েছে কিনা, আপনি সাবস্ক্রিপ্টগুলির সাথে রেখাগুলি উল্লেখ করতে পারেন ₀…₉, উদাহরণস্বরূপ

f
g

ফাংশন উল্লেখ করবে g। এখন আপনি যদি সর্বদা ফাংশনে ইনপুট প্রয়োগ করেন g(এবং এটি একাধিকবার ব্যবহার করুন); এটার মতো কিছু:

f₁⁰[...]g₁⁰[...]
h

আপনার একটি ল্যাম্বডা প্রবর্তন করা উচিত কারণ এটি প্রতিটি অতিরিক্ত ব্যবহারের জন্য আপনাকে 1 বাইট সংরক্ষণ করে:

λf⁰[...]g⁰[...])h

বিপরীতটিও সত্য হতে পারে

স্ব-রেফারেন্টিয়াল ল্যাম্বডাস ( φχψ) এর ক্ষেত্রে, আপনি বিশেষ পুনর্বিবেচনামূলক ফাংশনে সরাসরি ইনপুট প্রয়োগ করেন এমন একটি বিশেষ ক্ষেত্রে রয়েছে, এই ক্ষেত্রে আপনি নতুন ল্যাম্বডা সংজ্ঞায়িত করার পরিবর্তে সাবস্ক্রিপ্টটি ব্যবহার করে আরও ভাল ব্যবহার করতে পারেন


5

এর ব্যবহার Γ

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

f (x : xs) = <something>
f [] = <something else>

যেখানে <something>সম্পর্কে একটি অভিব্যক্তি x, xsএবং সম্ভবত f। এখানে 4 টি ওভারলোডিং রয়েছে Γযার প্রতিটিতে কিছুটা ভিন্নভাবে কাজ করা হয়।

list

প্রথম ওভারলোডিং, listএকটি মান aএবং একটি বাইনারি ফাংশন নেয় f। এটি একটি নতুন ফাংশন ফিরিয়ে দেয় যা একটি তালিকা গ্রহণ করে, aখালি থাকলে ফিরে আসে এবং fমাথা এবং লেজকে কল দেয় যদি এটি কিছু না হয়। উদাহরণস্বরূপ, Γ_1€একটি তালিকা নেয়, -1এটি খালি হলে প্রত্যাবর্তন করে , এবং পুচ্ছের মধ্যে প্রথম উপাদানটির প্রথম উপস্থিতির সূচক না হলে।

listN

বাদ দেওয়া এবং রিটার্ন টাইপের ডিফল্ট মান পরিবর্তে ব্যবহৃত হয় বাদে দ্বিতীয় ওভারলোডিংয়ের listNসমান is উদাহরণস্বরূপ, এটির সমতুল্য , যেহেতু ডিফল্ট সংখ্যার মান হয় ।listaΓ€Γ0€0

অনুশীলনে, এর listNচেয়ে বেশি ব্যবহৃত হয় list, যেহেতু ডিফল্ট মান হয় অপ্রাসঙ্গিক বা হুবহু আপনার যা প্রয়োজন। একটি সাধারণ প্যাটার্নটি হল Γ~αβγ, যেখানে αβγতিনটি ফাংশন রয়েছে; βএটি প্রথম উপাদান এবং γলেজের ক্ষেত্রে প্রযোজ্য এবং ফলাফলগুলি একত্রিত করে α। এটি উত্তর হিসাবে উদাহরণস্বরূপ ব্যবহৃত হয়েছিল । অন্যান্য নিদর্শন অন্তর্ভুক্ত Γo:αআবেদন করার জন্য αশুধুমাত্র প্রথম উপাদান, এবং Γ·:mαআবেদন করার জন্য αপ্রথম ছাড়া সমস্ত উপাদান। উত্তরটি উত্তরটিতে ব্যবহৃত হয়েছিল ।

listF

তৃতীয় ওভারলোডিং কিছুটা বেশি জড়িত। যেমন list, এটি একটি মান aএবং একটি ফাংশন নেয় fএবং একটি নতুন ফাংশন দেয় gযা একটি তালিকা গ্রহণ করে। যাইহোক, এই সময়টি fএকটি অতিরিক্ত ফাংশন আর্গুমেন্ট গ্রহণ করে, যা gনিজেই এটি এবং এটি যেকোন মূল্যে কল করতে পারে (ইনপুট তালিকার পুচ্ছ সহ, তবে সীমাবদ্ধ নয়)। এর অর্থ হল তালিকায় listFএকটি সাধারণ পুনরাবৃত্তি স্কিম প্রয়োগ করে। listFখুব প্রায়ই ব্যবহার করা হয় না, যেহেতু list/ এর সাথে স্পষ্ট পুনরাবৃত্তি listNসাধারণত একই দৈর্ঘ্য বা সংক্ষিপ্ত হয়, যেমন এই উত্তরে

listNF

listNFযা যা listFতা listNহ'ল list: ইনপুট aবাদ দেওয়া হয় এবং তার পরিবর্তে প্রত্যাবর্তনের ধরণের ডিফল্ট মান ব্যবহৃত হয়। বিরল পরিস্থিতিতে, এটি একটি ডান ভাঁজ থেকে কম হতে পারে, উদাহরণস্বরূপ এই উত্তরে

এর পুনরাবৃত্ত সংস্করণগুলির উদাহরণ হিসাবে Γ, ফাংশনটি Γλ·:o⁰↔প্রথমে, শেষ, দ্বিতীয়, দ্বিতীয় থেকে শেষ, তৃতীয়, তৃতীয়-থেকে-শেষ, এবং ক্রমের তালিকায় একটি তালিকাটিকে বদলে দেয়। এটি অনলাইন চেষ্টা করুন! ফাংশনটি fহ'ল সুস্পষ্ট ল্যাম্বদা λ·:o⁰↔, যার যুক্তি পুরো ফাংশন। কি fকরে সঙ্গে লেজ বিপরীত হয় , তবে প্রধান ফাংশন সঙ্গে যাও recursively কল o⁰, এবং পরিশেষে সঙ্গে মাথা পিছনে কর্মপ্রণালী ·:। অবশ্যই, Γ·:o₀↔এটি একটি বাইট সংক্ষিপ্ত, তবে লাইনে এই ফাংশনটি ছাড়া অন্য কিছু রয়েছে তবে কাজ করে না।


3

সংযুক্তকারীগুলি উচ্চতর ক্রমের ক্ষেত্রে প্রয়োগ করা যেতে পারে be

ধরুন আপনি পূর্ণসংখ্যার একটি তালিকা আছে এক্স , এবং আপনি উপাদান মোট সংখ্যা গণনা করতে চান এক্স যে চেয়ে বড় হয় দৈর্ঘ্য (এক্স) । কোনও শিকারীকে সন্তুষ্ট করে এমন উপাদানগুলি গণনা করা উচ্চতর ক্রমের সাথে করা হয় #তবে এখানে প্রাকটিক ( দৈর্ঘ্যের চেয়ে বড় হওয়া ) (এক্স ) উপর নির্ভর করে এক্স । সমাধানটি হ'ল সংযুক্তকারীটি প্রয়োগ করা #এবং সেই ফাংশন o>Lযা পরীক্ষা করে একটি তালিকা সংখ্যার চেয়ে কম হয় কিনা। ফাংশনে Ṡ#o>L, এক্সটি তালিকাটি পাস করা হয় o>L, আংশিক প্রয়োগিত ফাংশনটি পাস করা হয় #এবং এক্সটিকে# দ্বিতীয় আর্গুমেন্ট হিসাবে দেওয়া হয় ।

সাধারণভাবে, যদি αউচ্চতর-অর্ডার ফাংশন হয় তবে βএকটি বাইনারি ফাংশন এবং γঅ্যানারি ফাংশন, Ṡαβহাস্কেল সিউডোকোডের সমতুল্য

\x -> α (\y -> β x y) x

§αβγ সমতুল্য

\x -> α (\y -> β x y) (γ x)

এবং ~αβγএর সমতুল্য

\x y -> α (\z -> β x z) (γ y)

যতক্ষণ টাইপগুলি ম্যাচ করে।

অন্য কংক্রিট উদাহরণ হিসাবে, §►δṁ≠Pএকটি তালিকা একটি বিন্যাস খুঁজে বের করে এক্স যে আনুসঙ্গিক মান পরম পার্থক্যের সমষ্টি maximizes এক্স ( δṁ≠পরম পার্থক্য ব্যবহার দুটি তালিকা পিন এবং সমষ্টি নেয়)।


3

হুসের ডিফল্ট মান

হাস্ক হাস্কেলের মতো কঠোর নয় যেখানে আপনি সমস্যায় পড়েন যখন উদাহরণস্বরূপ আপনি lastখালি তালিকার উপাদানটি পাওয়ার চেষ্টা করেন । এটি অর্জনের জন্য এটি পূর্বনির্ধারিত মানগুলি ব্যবহার করে, এখানে ডিফল্ট মান, ম্যাক্সিমা এবং মিনিমা তালিকা রয়েছে:

.------------------------------------.---------------.----------.-------.
|   Type (X and Y are placeholders)  | default (def) |    max   |  min  |
|------------------------------------|---------------|----------|-------|
|       Character (C)                |      ' '      | \1114111 | \NUL  |
|       Numbers   (N)                |       0       |   Inf    | -Inf  |
|       List of X (LX)               |      []       |  ∞ max   |   []  | *
|       Function :: X -> Y           | const (def Y) |   n/a    |  n/a  |
'------------------------------------'---------------'----------'-------'

* এখানে সংশ্লিষ্ট সর্বোচ্চের একটি অসীম তালিকা উপস্থাপন করা উচিত (উদাহরণের জন্য নীচে দেখুন)

দ্রষ্টব্য: টিপলসের জন্য (এক্স, ওয়াই) এটি প্রতিটি উপাদানগুলির জন্য পৃথকভাবে মান ব্যবহার করবে।


যখন তারা ব্যবহার করা হয়

যদিও ম্যাক্সিমা এবং মিনিমা কেবল ▲▼খালি তালিকার জন্য ব্যবহৃত হয় (উদাহরণস্বরূপ husk -u "▼" "[]:LLN"একটি অসীম তালিকার প্রত্যাবর্তন করবে Inf) ডিফল্ট মানগুলি কয়েকটি স্থানে ব্যবহৃত হয়:

  • নিজেকে একটি মান প্রদান না করে খালি তালিকায় ভাঁজ করা ( Fএবং )
  • ডিফল্ট মান প্রিপেন্ডিং (সাথে Θ )
  • যখন পড়া (r ) ব্যর্থ হয়
  • প্রথম / শেষ উপাদান ( ←→) পাওয়া বা একটিতে সূচীকরণ (! ) এ
  • প্যাটার্ন ম্যাচিং (Γখালি তালিকায় )
  • ব্যবহার করে বা খালি তালিকায়
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.