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

clojurescript
clojure

#1

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

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

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

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

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

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


#2

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

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

(count (str 123)

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

(frequencies (str 123))

#3

منظورم تعداد 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 –