شمارش تعداد ارقام یک عدد در کلوژر

سلام.
وقت به خیر.

همونطور که از اسم تاپیک مشخصه، قصد دارم که تعداد ارقام یک عدد رو به دست بیارم.
البته به روش کلوژری!

با اکثر توابع کلوژر آشنایی ندارم و اولین چیزی که به ذهنم میرسه اینه که عدد رو تبدیل کنم به وکتور و بعد اونو join کنم و به یه string برسم که میشه با count تعداد کاراکترهاش رو به دست بیارم:

(count
    (clojure.string/join ""
        (conj [] 12345)))
; Or
(->> 12345
     (conj [])
     (clojure.string/join "")
     (count))

اصلا به نظر منطقی نمیاد، ولی فکر نمیکنم پیدا کردن تعداد ارقام از راه تقسیمهای متوالی هم درست باشه (به نظر کلوژری نمیاد و از چند جهت به سیستم فشار میاره)

پیشنهادی برای رفع این مشکل دارید؟
تا جایی که میدونم تابعی برای تبدیل مستقیم عدد به حروف وجود نداره (برعکسش هست، read-string) و تابعی برای پیدا کردن تعداد ارقام یک عدد هم وجود نداره.

منظورت تعداد digit هاست ؟ مثلا 123 می شه 3 ؟

اگر این جوری منظورت هست که خوب می تونی خیلی ساده بنویسی:

(count (str 123)

اما اگر منظورت اینه که می خوای تعداد رقم های مختلف رو بشمری اون موقع می تونی اینجوری بنویسی:

(frequencies (str 123))
1 Likes

منظورم تعداد digitها بود ولی frequencies هم چیزیه که برای یه بخش دیگه از کد نیاز داشتم.

خیلی ممنون.


من به جای frequencies یه تابع نوشته بودم:

(defn word-count
  ([s]
   (word-count {} (word-split s)))
  ([result vect]
   (if (empty? vect)
     result
     (let [f (first vect)]
       (if (contains? result f)
         (->
           (assoc result f (inc (get result f)))
           (recur (rest vect)))
         (->
           (assoc result f 1)
           (recur (rest vect))))))))

مثل اینکه نیاز به اینهمه دردسر وجود نداشت :grinning:


As a programmer, never underestimate your ability to come up with ridiculously complex solutions for simple problems.
– Thomas Fuchs –

1 Likes