আপনার কে নোডগুলি জানুন
কার্যকরী ভাষাগুলিতে কয়েকটি শক্তিশালী নির্মাণ (গল্ফিংয়ের জন্য) let ... in ...
।
অবশ্যই পরিষ্কার, এটি আছে এবং আরও ভাল কিছু - দ্য #
।
নোড কী?
ক্লিন #
এবং সর্বব্যাপী |
(প্যাটার্ন গার্ড) উভয়ই 'নোড এক্সপ্রেশন' হিসাবে পরিচিত।
উল্লেখযোগ্যভাবে, তারা আপনাকে ক্লিনে জরুরীভাবে প্রোগ্রাম করার অনুমতি দেয় (যা এখানে সত্যিই ভাল!)।
#
(দিন-পূর্বে):
এগুলি উভয়ই একটি স্ট্রিং হিসাবে প্রদত্ত পূর্ণসংখ্যার মান গণনা করে, এর অক্ষরের যোগফলকে গুণ করে
f s=let i=toInt s;n=sum[toInt c\\c<-:s]in n*i
f s#i=toInt s
#s=sum[toInt c\\c<-:s]
=s*i
সহ সংস্করণটি কীভাবে #
সংক্ষিপ্ত হবে এবং কীভাবে আমরা নতুন সংজ্ঞা দিতে পারি তা নোট করুন s
। এটি কার্যকর হয় যদি আমাদের যখন ভেরিয়েবলের মান পাওয়ার প্রয়োজন না হয় তবে আমরা কেবল নামটি পুনরায় ব্যবহার করতে পারি। ( let
আপনি যখন এটি করতে পারেন তখন সমস্যাগুলির মধ্যে দৌড়াতে পারেন)
let
যখন আপনার মতো কিছু প্রয়োজন তখন ব্যবহার করা সহজflip f = let g x y = f y x in g
|
(প্যাটার্ন পাহারা):
ক্লিনের প্যাটার্ন গার্ডটি অন্যান্য অন্যান্য কার্যকরী ভাষার মতো ব্যবহার করা যেতে পারে - তবে এটি অত্যাবশ্যকীয়র মতোও ব্যবহার করা যেতে পারে if ... else ...
। এবং ত্রৈমাসিক প্রকাশের একটি সংক্ষিপ্ত সংস্করণ।
উদাহরণস্বরূপ, এই সমস্তগুলি একটি পূর্ণসংখ্যার চিহ্নটি ফেরত দেয়:
s n|n<>0|n>0=1= -1
=0
s n=if(n<>0)if(n>0)1(-1)0
s n|n>0=1|n<0= -1=0
অবশ্যই, শেষটি যা প্রথাগতভাবে প্রথাগতভাবে বেশি ব্যবহার করে তা হ'ল সংক্ষিপ্ততম, তবে প্রথমটি দেখায় যে আপনি তাদের বাসাতে পারেন (তবে বিন্যাসের নিয়মে কেবল দুটি শর্তহীন রিটার্ন ক্লজ একই লাইনে উপস্থিত হতে পারে), এবং দ্বিতীয়টি কী দেখায় প্রথমটি যৌক্তিকভাবে করে।
একটি নোট:
আপনি এই অভিব্যক্তিটি মূলত যে কোনও জায়গায় ব্যবহার করতে পারেন। Lambdas সালে case ... of
, let ... in
ইত্যাদি
import StdEnv
+ +a and b
চেয়ে ছোট (21 বাইটস)%[a:r]|a= %r=a;%_=True
, (22 বাইটস) যদিও? অথবা এটিimport StdEnv
+a=True and b=True
(31 বাইট) হবে, যা ক্ষেত্রে এটি অবশ্যই সংক্ষিপ্ততর? (আমি কখনই ক্লিন,