একটি লুপ পুনরাবৃত্তি ভিতরে একটি মানচিত্র বস্তুর সংজ্ঞা - Clojure

আমি একটি লুপ পুনরাবৃত্তি ব্যবহার করার চেষ্টা করছি যে লুপ ভিতরে একটি খালি মানচিত্র তৈরি করে। লুপের প্রতিটি এন্ট্রির জন্য (মানচিত্রের ভেক্টরের মাধ্যমে লুপ) এটি নতুন করে তৈরি মানচিত্রে একটি কী আছে কিনা তা দেখাবে যা পুনরাবৃত্তি মানের মানগুলির সাথে মেলে এবং যদি এটি তৈরি না করে।

আমি এই কোড তৈরি করেছি:

(def meteor-map (json/read-str (clojure.string/lower-case
(slurp "https://data.nasa.gov/resource/y77d-th95.json"))))

(defn most-falls [values]
(loop [values map count-tracker{}]
  (if (empty? values)
    (count-tracker)
    (do
      (def key (keyword (get (first values) "year")))
      (if (contains? (first values) key)
        (do
          (def count-tracker (update count-tracker key inc))
          (recur (rest values) count-tracker)
        )
        (do
          (def count-tracker (assoc count-tracker key 1))
          (recur (rest values) count-tracker)
        )
      )
    )
  )
)
)

(most-falls meteor-map)

তবে যখন আমি এই ফাংশনটি কল করি এবং উল্কা-মানচিত্রে পাস করি (যা মানচিত্রগুলির একটি ভেক্টর) আমি বলছি একটি ত্রুটি

ভুল সংখ্যাগুলি args (0) persistentarraymap এ প্রেরিত

আমি মনে করি এটির কারণে আমি কীভাবে লুপ তৈরির ভিতরে প্রাথমিক গণ-ট্র্যাকার বস্তু তৈরি করতে পারি তবে আমি অনিশ্চিত।

কোন ধারনা?

ধন্যবাদ

পিএস সচেতন এই প্রশ্ন একটি বিট অস্পষ্ট তাই কোন প্রশ্ন শুধু জিজ্ঞাসা!

0
সঠিক ত্রুটি কি? সমস্যা হল, আপনার কোডটি একাধিক সমস্যাগুলির মতো ( def , এবং [মান কোড লুপ ব্যবহার করে), তাই ঠিক কি তা ঠিক করা কঠিন ভুল হচ্ছে।
যোগ লেখক Carcigenicate, উৎস
(গণনা ট্র্যাকার) কি করা অনুমিত হয়? এটা আপনার ত্রুটি। আপনি আর্গুমেন্ট ছাড়া মানচিত্র কল করার চেষ্টা করছেন। একবার আপনি এটি ঠিক করার পরে, মানচিত্র মানচিত্র আপনাকে মানচিত্র একটি ফাংশন থেকে একটি ত্রুটি দেবে। আমি মনে করি আপনি শুধু মান মান </কোড> মানে।
যোগ লেখক Carcigenicate, উৎস
কিন্তু আপনি (গণনাকারী) দিয়ে কী করার চেষ্টা করছেন? শুধু গণনা ট্র্যাকার ফিরে? তারপর এটি চারপাশে বন্ধনী মুছে ফেলুন। মনে রাখবেন, যদি আপনি বন্ধনীতে কিছু ঘিরে থাকেন, তবে আপনি এটি একটি ফাংশন হিসাবে কল করছেন।
যোগ লেখক Carcigenicate, উৎস
আমি একটি উত্তর লিখছি, আপনার উল্লেখ করা কিছু জিনিস আছে। আমাকে কয়েক মিনিট দিন।
যোগ লেখক Carcigenicate, উৎস
@Carcigenicate গণনা ট্র্যাকারটি বর্তমানে একটি খালি মানচিত্র বলে মনে করা হয় এবং তারপর লুপে থাকা মানের উপর নির্ভর করে কীগুলি আপডেট/আপডেট করুন। উদাহরণস্বরূপ, যদি প্রথম মানটি থাকে: "1996" এর বছর এবং এটি ইতিমধ্যে গণনাকারীর মধ্যে বিদ্যমান না থাকে তবে এটি সেই মানচিত্রে সেই কীটি যোগ করবে। এটি ইতিমধ্যে বিদ্যমান থাকলে মান (উদাঃ 1996: 1) বাড়ানো হবে। আশা করি যে জ্ঞান করে!
যোগ লেখক broliverparker, উৎস
@ কর্কিগেননেট যে আমার সমস্যা সমাধান করেছে, অনেক ধন্যবাদ!
যোগ লেখক broliverparker, উৎস

8 উত্তর

এখানে আনা একাধিক জিনিস আছে। যদিও আপনার প্রধান সমস্যাটি (গণনাকারী) এর সাথে রয়েছে। আপনি বন্ধনী মধ্যে মানচিত্র পার্শ্ববর্তী হয়, যার মানে আপনি একটি ফাংশন হিসাবে এটি কল করতে চান। আপনি ইচ্ছাকৃতভাবে অন্য ভাষাগুলিতে যেমন কোডে বন্ধনী যুক্ত করতে পারবেন না; এটি ক্লোজারে একটি খুব নির্দিষ্ট অর্থ রয়েছে। (f) always মানে ফাংশন f বলা হচ্ছে। মানটি ফেরত দেওয়ার জন্য এটি গণনাকারী এ পরিবর্তন করুন।

অন্য জিনিস:

  • NEVER use def inside of a function unless it's necessary. In this case though, it's entirely unnecessary. Every use of def creates globals that last for the length of the program (yes, they exist even after the function exits!). Use let instead:

    (let [key (keyword (get (first values) "year")))]
       ... ) ; Use key here
    
  • (loop [values map ...] will cause errors as well. map is a function, so this throws away the argument passed in to most-falls, overwriting it with the map function. This will cause an error when you try to use values as a sequence, since the map function doesn't support empty? or first, or anything else you're trying to use it for. I think you just intended to just rebind the argument to be used in the loop. Just change it to (loop [values values ...]. Arguably, you shouldn't shadow arguments by creating other bindings with the same name, but that's not exceedingly important here.

এখনো কয়েকটি ছোট ছোট জিনিস যা উন্নত হতে পারে। ধ্বংস করার মাধ্যমে আপনি প্রথম এবং বিশ্রাম এ কলগুলি এড়িয়ে যেতে পারেন এবং লুপ ব্যবহার করে <�লুপ ব্যবহার করে লুপ ব্যবহার করতে পারেন। >, কিন্তু যারা প্রধান বিষয় থেকে হতাশ হবে। আমি উপরে উল্লেখিত বিবেচনা বিবেচনা করে, আমি আপনার ফাংশন লিখতে চাই:

(defn most-falls [values]
  (loop [values values
         count-tracker {}]
    (if (empty? values)
      count-tracker
      (let [key (keyword (get (first values) "year"))]
        (recur (rest values)
               (if (contains? (first values) key)
                 (update count-tracker key inc)
                 (assoc count-tracker key 1)))))))
3
যোগ

এখানে আনা একাধিক জিনিস আছে। যদিও আপনার প্রধান সমস্যাটি (গণনাকারী) এর সাথে রয়েছে। আপনি বন্ধনী মধ্যে মানচিত্র পার্শ্ববর্তী হয়, যার মানে আপনি একটি ফাংশন হিসাবে এটি কল করতে চান। আপনি ইচ্ছাকৃতভাবে অন্য ভাষাগুলিতে যেমন কোডে বন্ধনী যুক্ত করতে পারবেন না; এটি ক্লোজারে একটি খুব নির্দিষ্ট অর্থ রয়েছে। (f) always মানে ফাংশন f বলা হচ্ছে। মানটি ফেরত দেওয়ার জন্য এটি গণনাকারী এ পরিবর্তন করুন।

অন্য জিনিস:

  • NEVER use def inside of a function unless it's necessary. In this case though, it's entirely unnecessary. Every use of def creates globals that last for the length of the program (yes, they exist even after the function exits!). Use let instead:

    (let [key (keyword (get (first values) "year")))]
       ... ) ; Use key here
    
  • (loop [values map ...] will cause errors as well. map is a function, so this throws away the argument passed in to most-falls, overwriting it with the map function. This will cause an error when you try to use values as a sequence, since the map function doesn't support empty? or first, or anything else you're trying to use it for. I think you just intended to just rebind the argument to be used in the loop. Just change it to (loop [values values ...]. Arguably, you shouldn't shadow arguments by creating other bindings with the same name, but that's not exceedingly important here.

এখনো কয়েকটি ছোট ছোট জিনিস যা উন্নত হতে পারে। ধ্বংস করার মাধ্যমে আপনি প্রথম এবং বিশ্রাম এ কলগুলি এড়িয়ে যেতে পারেন এবং লুপ ব্যবহার করে <�লুপ ব্যবহার করে লুপ ব্যবহার করতে পারেন। >, কিন্তু যারা প্রধান বিষয় থেকে হতাশ হবে। আমি উপরে উল্লেখিত বিবেচনা বিবেচনা করে, আমি আপনার ফাংশন লিখতে চাই:

(defn most-falls [values]
  (loop [values values
         count-tracker {}]
    (if (empty? values)
      count-tracker
      (let [key (keyword (get (first values) "year"))]
        (recur (rest values)
               (if (contains? (first values) key)
                 (update count-tracker key inc)
                 (assoc count-tracker key 1)))))))
3
যোগ

এখানে আনা একাধিক জিনিস আছে। যদিও আপনার প্রধান সমস্যাটি (গণনাকারী) এর সাথে রয়েছে। আপনি বন্ধনী মধ্যে মানচিত্র পার্শ্ববর্তী হয়, যার মানে আপনি একটি ফাংশন হিসাবে এটি কল করতে চান। আপনি ইচ্ছাকৃতভাবে অন্য ভাষাগুলিতে যেমন কোডে বন্ধনী যুক্ত করতে পারবেন না; এটি ক্লোজারে একটি খুব নির্দিষ্ট অর্থ রয়েছে। (f) always মানে ফাংশন f বলা হচ্ছে। মানটি ফেরত দেওয়ার জন্য এটি গণনাকারী এ পরিবর্তন করুন।

অন্য জিনিস:

  • NEVER use def inside of a function unless it's necessary. In this case though, it's entirely unnecessary. Every use of def creates globals that last for the length of the program (yes, they exist even after the function exits!). Use let instead:

    (let [key (keyword (get (first values) "year")))]
       ... ) ; Use key here
    
  • (loop [values map ...] will cause errors as well. map is a function, so this throws away the argument passed in to most-falls, overwriting it with the map function. This will cause an error when you try to use values as a sequence, since the map function doesn't support empty? or first, or anything else you're trying to use it for. I think you just intended to just rebind the argument to be used in the loop. Just change it to (loop [values values ...]. Arguably, you shouldn't shadow arguments by creating other bindings with the same name, but that's not exceedingly important here.

এখনো কয়েকটি ছোট ছোট জিনিস যা উন্নত হতে পারে। ধ্বংস করার মাধ্যমে আপনি প্রথম এবং বিশ্রাম এ কলগুলি এড়িয়ে যেতে পারেন এবং লুপ ব্যবহার করে <�লুপ ব্যবহার করে লুপ ব্যবহার করতে পারেন। >, কিন্তু যারা প্রধান বিষয় থেকে হতাশ হবে। আমি উপরে উল্লেখিত বিবেচনা বিবেচনা করে, আমি আপনার ফাংশন লিখতে চাই:

(defn most-falls [values]
  (loop [values values
         count-tracker {}]
    (if (empty? values)
      count-tracker
      (let [key (keyword (get (first values) "year"))]
        (recur (rest values)
               (if (contains? (first values) key)
                 (update count-tracker key inc)
                 (assoc count-tracker key 1)))))))
3
যোগ

এখানে আনা একাধিক জিনিস আছে। যদিও আপনার প্রধান সমস্যাটি (গণনাকারী) এর সাথে রয়েছে। আপনি বন্ধনী মধ্যে মানচিত্র পার্শ্ববর্তী হয়, যার মানে আপনি একটি ফাংশন হিসাবে এটি কল করতে চান। আপনি ইচ্ছাকৃতভাবে অন্য ভাষাগুলিতে যেমন কোডে বন্ধনী যুক্ত করতে পারবেন না; এটি ক্লোজারে একটি খুব নির্দিষ্ট অর্থ রয়েছে। (f) always মানে ফাংশন f বলা হচ্ছে। মানটি ফেরত দেওয়ার জন্য এটি গণনাকারী এ পরিবর্তন করুন।

অন্য জিনিস:

  • NEVER use def inside of a function unless it's necessary. In this case though, it's entirely unnecessary. Every use of def creates globals that last for the length of the program (yes, they exist even after the function exits!). Use let instead:

    (let [key (keyword (get (first values) "year")))]
       ... ) ; Use key here
    
  • (loop [values map ...] will cause errors as well. map is a function, so this throws away the argument passed in to most-falls, overwriting it with the map function. This will cause an error when you try to use values as a sequence, since the map function doesn't support empty? or first, or anything else you're trying to use it for. I think you just intended to just rebind the argument to be used in the loop. Just change it to (loop [values values ...]. Arguably, you shouldn't shadow arguments by creating other bindings with the same name, but that's not exceedingly important here.

এখনো কয়েকটি ছোট ছোট জিনিস যা উন্নত হতে পারে। ধ্বংস করার মাধ্যমে আপনি প্রথম এবং বিশ্রাম এ কলগুলি এড়িয়ে যেতে পারেন এবং লুপ ব্যবহার করে <�লুপ ব্যবহার করে লুপ ব্যবহার করতে পারেন। >, কিন্তু যারা প্রধান বিষয় থেকে হতাশ হবে। আমি উপরে উল্লেখিত বিবেচনা বিবেচনা করে, আমি আপনার ফাংশন লিখতে চাই:

(defn most-falls [values]
  (loop [values values
         count-tracker {}]
    (if (empty? values)
      count-tracker
      (let [key (keyword (get (first values) "year"))]
        (recur (rest values)
               (if (contains? (first values) key)
                 (update count-tracker key inc)
                 (assoc count-tracker key 1)))))))
3
যোগ

প্রথমত, এই ধারাটিতে স্পষ্টভাবে একটি সমস্যা রয়েছে:

(loop [values map count-tracker{}]

আপনি কি অর্জন করার চেষ্টা করেছেন তা আমি ব্যবহার করি না, তবে দয়া করে একটি চেহারা নিন।

এরপরে, কোডের ভিতরে def বা defn ফর্মগুলি ব্যবহার করবেন না, শুধুমাত্র একটি নামস্থান শীর্ষ স্তরের উপরে।

পরিশেষে, লুপ/​​পুনরাবৃত্তি খুবই নিম্ন স্তরের ফর্ম এবং আপনি কী করছেন তা দৃঢ় জ্ঞান দিয়ে ব্যবহার করা উচিত। আরো প্রায়ই, এটি আরো ব্যবহারকারী বান্ধব বেশী সঙ্গে প্রতিস্থাপিত হতে পারে। হ্রাস আমি বিশ্বাস করি ভাল একটি। এটি একটি প্রাথমিক মান (আপনার ক্ষেত্রে একটি খালি মানচিত্র), একটি সংগ্রহ এবং দুটি আর্গুমেন্টের একটি ফাংশন নেয় যেখানে দ্বিতীয়টি বর্তমান সংগ্রহের আইটেম এবং দ্বিতীয়টি হয় প্রাথমিক মান বা পূর্ববর্তী ফাংশন কলটির ফলাফল।

যে ফাংশনের ভিতরে, আপনার মানচিত্রে কিছু নির্দিষ্ট কী আছে কিনা তা নির্ধারণ করুন এবং এটি না থাকলে তা যুক্ত করুন।

সংক্ষিপ্ত উদাহরণ:

# here are some data you've read from a file
(def items [{...} {...} {...}])

# reduce process function
(defn process
  [result item]
  (if (:some-key result) ;; here, you check the current map for a key
    result               ;; return the old map if everything is ok
    (assoc result :some-key some-data)))  ;; accumulate a new key into a map

(reduce process {} items)
1
যোগ

প্রথমত, এই ধারাটিতে স্পষ্টভাবে একটি সমস্যা রয়েছে:

(loop [values map count-tracker{}]

আপনি কি অর্জন করার চেষ্টা করেছেন তা আমি ব্যবহার করি না, তবে দয়া করে একটি চেহারা নিন।

এরপরে, কোডের ভিতরে def বা defn ফর্মগুলি ব্যবহার করবেন না, শুধুমাত্র একটি নামস্থান শীর্ষ স্তরের উপরে।

পরিশেষে, লুপ/​​পুনরাবৃত্তি খুবই নিম্ন স্তরের ফর্ম এবং আপনি কী করছেন তা দৃঢ় জ্ঞান দিয়ে ব্যবহার করা উচিত। আরো প্রায়ই, এটি আরো ব্যবহারকারী বান্ধব বেশী সঙ্গে প্রতিস্থাপিত হতে পারে। হ্রাস আমি বিশ্বাস করি ভাল একটি। এটি একটি প্রাথমিক মান (আপনার ক্ষেত্রে একটি খালি মানচিত্র), একটি সংগ্রহ এবং দুটি আর্গুমেন্টের একটি ফাংশন নেয় যেখানে দ্বিতীয়টি বর্তমান সংগ্রহের আইটেম এবং দ্বিতীয়টি হয় প্রাথমিক মান বা পূর্ববর্তী ফাংশন কলটির ফলাফল।

যে ফাংশনের ভিতরে, আপনার মানচিত্রে কিছু নির্দিষ্ট কী আছে কিনা তা নির্ধারণ করুন এবং এটি না থাকলে তা যুক্ত করুন।

সংক্ষিপ্ত উদাহরণ:

# here are some data you've read from a file
(def items [{...} {...} {...}])

# reduce process function
(defn process
  [result item]
  (if (:some-key result) ;; here, you check the current map for a key
    result               ;; return the old map if everything is ok
    (assoc result :some-key some-data)))  ;; accumulate a new key into a map

(reduce process {} items)
1
যোগ

প্রথমত, এই ধারাটিতে স্পষ্টভাবে একটি সমস্যা রয়েছে:

(loop [values map count-tracker{}]

আপনি কি অর্জন করার চেষ্টা করেছেন তা আমি ব্যবহার করি না, তবে দয়া করে একটি চেহারা নিন।

এরপরে, কোডের ভিতরে def বা defn ফর্মগুলি ব্যবহার করবেন না, শুধুমাত্র একটি নামস্থান শীর্ষ স্তরের উপরে।

পরিশেষে, লুপ/​​পুনরাবৃত্তি খুবই নিম্ন স্তরের ফর্ম এবং আপনি কী করছেন তা দৃঢ় জ্ঞান দিয়ে ব্যবহার করা উচিত। আরো প্রায়ই, এটি আরো ব্যবহারকারী বান্ধব বেশী সঙ্গে প্রতিস্থাপিত হতে পারে। হ্রাস আমি বিশ্বাস করি ভাল একটি। এটি একটি প্রাথমিক মান (আপনার ক্ষেত্রে একটি খালি মানচিত্র), একটি সংগ্রহ এবং দুটি আর্গুমেন্টের একটি ফাংশন নেয় যেখানে দ্বিতীয়টি বর্তমান সংগ্রহের আইটেম এবং দ্বিতীয়টি হয় প্রাথমিক মান বা পূর্ববর্তী ফাংশন কলটির ফলাফল।

যে ফাংশনের ভিতরে, আপনার মানচিত্রে কিছু নির্দিষ্ট কী আছে কিনা তা নির্ধারণ করুন এবং এটি না থাকলে তা যুক্ত করুন।

সংক্ষিপ্ত উদাহরণ:

# here are some data you've read from a file
(def items [{...} {...} {...}])

# reduce process function
(defn process
  [result item]
  (if (:some-key result) ;; here, you check the current map for a key
    result               ;; return the old map if everything is ok
    (assoc result :some-key some-data)))  ;; accumulate a new key into a map

(reduce process {} items)
1
যোগ

প্রথমত, এই ধারাটিতে স্পষ্টভাবে একটি সমস্যা রয়েছে:

(loop [values map count-tracker{}]

আপনি কি অর্জন করার চেষ্টা করেছেন তা আমি ব্যবহার করি না, তবে দয়া করে একটি চেহারা নিন।

এরপরে, কোডের ভিতরে def বা defn ফর্মগুলি ব্যবহার করবেন না, শুধুমাত্র একটি নামস্থান শীর্ষ স্তরের উপরে।

পরিশেষে, লুপ/​​পুনরাবৃত্তি খুবই নিম্ন স্তরের ফর্ম এবং আপনি কী করছেন তা দৃঢ় জ্ঞান দিয়ে ব্যবহার করা উচিত। আরো প্রায়ই, এটি আরো ব্যবহারকারী বান্ধব বেশী সঙ্গে প্রতিস্থাপিত হতে পারে। হ্রাস আমি বিশ্বাস করি ভাল একটি। এটি একটি প্রাথমিক মান (আপনার ক্ষেত্রে একটি খালি মানচিত্র), একটি সংগ্রহ এবং দুটি আর্গুমেন্টের একটি ফাংশন নেয় যেখানে দ্বিতীয়টি বর্তমান সংগ্রহের আইটেম এবং দ্বিতীয়টি হয় প্রাথমিক মান বা পূর্ববর্তী ফাংশন কলটির ফলাফল।

যে ফাংশনের ভিতরে, আপনার মানচিত্রে কিছু নির্দিষ্ট কী আছে কিনা তা নির্ধারণ করুন এবং এটি না থাকলে তা যুক্ত করুন।

সংক্ষিপ্ত উদাহরণ:

# here are some data you've read from a file
(def items [{...} {...} {...}])

# reduce process function
(defn process
  [result item]
  (if (:some-key result) ;; here, you check the current map for a key
    result               ;; return the old map if everything is ok
    (assoc result :some-key some-data)))  ;; accumulate a new key into a map

(reduce process {} items)
1
যোগ