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


16

ক্লোজার ব্যবহার করে কোড গল্ফ করার জন্য আপনার টিপস কী?

এই প্রশ্নের উদ্দেশ্য হ'ল ক্লজুরের সাথে সুনির্দিষ্ট এবং সাধারণ কোড-গল্ফিং সমস্যায় ব্যবহার করা যেতে পারে এমন কৌশলগুলির একটি তালিকা সংগ্রহ করা।


হুম .. এই ধরণের পোস্টগুলি মেটাতে থাকা উচিত নয় (আমি নিশ্চিত যে মেটা 5+ বছর আগে বিদ্যমান ছিল)
অ্যালবার্ট রেনশো

উত্তর:


6

ল্যাম্বডাসের জন্য পাঠক সিনট্যাক্স ব্যবহার করুন।
সুতরাং ব্যবহার

#(+ % %2 %3)

পরিবর্তে

(fn [x y z] (+ x y z))

আপনি কিছু সময় হোয়াইটস্পেস নির্মূল করতে পারেন:

#(if (< % 0) (- %) %)
#(if(< % 0)(- %)%)

উপায় #(+ % %2 %3)দ্বারা সমতুল্য +
bfontaine

4

আপনি যেখানে সাদা স্থান সরিয়ে ফেলতে পারেন:

  • স্ট্রিং এবং অন্য যে কোনও কিছুর মধ্যে:

    (println(+"Hello, World!"1))
    
  • বন্ধনী এবং অন্য যে কোনও কিছুর মধ্যে:

    (for[x(range 5)](* x x))
    
  • একটি সংখ্যা এবং বিল্টিন বা পরিবর্তনশীল নাম ব্যতীত অন্য কিছুর মধ্যে:

    Allowed:
    (+ 1"Example")
    (map{1"-1"2"-2"}[1 2 3])
    
    Not allowed:
    (+1 2)
    
  • মধ্যে @(পরমাণু জন্য ডি-রেফারেন্স) এবং বন্ধনী।


এছাড়াও ডেরেফ পাঠক ম্যাক্রোর আগে@
ASCII- কেবল

1
এছাড়াও কখনও কখনও আপনি একটি এ স্টাফ পুনরায় ব্যবস্থা letকরতে এবং কিছু জায়গা থেকে মুক্তি পেতে সক্ষম হতে পারে ।
নিকোনিহার

বেনামে ফাংশনগুলির পরামিতিগুলির পূর্বে: #(+ 1(first%))=#(+ 1 (first %))
bfontaine

3

স্ট্রিংগুলি অক্ষরের ক্রম হিসাবে বিবেচনা করা যেতে পারে

উদাহরণস্বরূপ অক্ষরে বর্ণমালা অনুসারে বাছাই করা:

(sort "hello")
=> (\e \h \l \l \o)

1
স্ট্রিংগুলি প্রায় প্রতিটি ভাষায়
বর্ণের

3
অথবা বরং,
ক্লোজুরেতে

2

nth ... 0পরিবর্তে ব্যবহার করুনfirst

একটি সংগ্রহ প্রথম উপাদান পেতে, ব্যবহার (nth ... 0)উপর firstএকটি বাইট সংরক্ষণ:

(first[2 3 4]): 14 bytes
(nth[2 3 4]0): 13 bytes (saves a byte!)

একই second(2 বাইট)
ইউরিয়েল

1
এছাড়াও আপনি ভেক্টরগুলিকে ফাংশন হিসাবে ব্যবহার করতে পারেন, তাই ([2 3 4]1)সূচী 1 এ উপাদানটি প্রদান করে This উদাহরণস্বরূপ ইনপুট ফর্ম্যাটটি নমনীয় হলে এটি উপকারী হতে হবে।
নিকোনিহার

1

হ্রাস পরিবর্তে প্রয়োগ করুন

উদাহরণস্বরূপ #(apply + %)এক বাইট চেয়ে কম খাটো #(reduce + %)


1

আপনার যদি ইতিমধ্যে একটি জন্য থাকে তবে যাক না

উদাহরণস্বরূপ: #(for[a[(sort %)]...)পরিবর্তে #(let[a(sort %)](for ...))

জন্য একটি :letকনস্ট্রাক্ট আছে কিন্তু কোড গল্ফ জন্য এটি খুব ভার্জোজ।


1

ব্যবহারের +এবং -পরিবর্তে incএবংdec

আপনি প্যারেন্স সহ কোনও অভিব্যক্তিটি ব্যবহার করছেন inc/ করলে এটি 1 বাইট সংরক্ষণ করে dec:

(inc(first[1 3 5]))
(+(first[1 3 5])1)

1

ifসাম্যতার জন্য পরীক্ষা করার সময় মানচিত্রের পরিবর্তে মানচিত্র ব্যবহার করুন

;; if n=3 then A else B
(if (= 3 n) A B) ; (if(=3n)AB)
({3 A} n B)      ; ({3A}nB) -> -3 chars

;; if n=2 or n=3 then A else B
(if (#{2 3} n) A B) ; (if(#{23}n)AB)
({2 A 3 A} n B)     ; ({2A3A}nB) -> -4 chars

1

দীর্ঘ ফাংশনের নামগুলি একক বাইট প্রতীককে আবদ্ধ করুন

উদাহরণস্বরূপ, আপনি ব্যবহার করার দরকার হয় partitionবা frequenciesএকাধিক বার, এটা তাদের একটি একটি একক বাইট প্রতীক জুড়তে উপকারী হতে পারে letম্যাক্রো। আবার যদি আপনার letঅন্যথায় প্রয়োজন না হয় তবে এটি উপযুক্ত হবে না , এবং ফাংশনটির নাম তুলনামূলকভাবে ছোট is


0

মানচিত্রের পরিবর্তে ব্যবহার করুন

উদাহরণস্বরূপ সমতুল্যর #(for[i %](Math/abs i))চেয়ে অনেক খাটো map

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