【问题标题】:How does this clojure digits function work?这个 clojure 数字函数是如何工作的?
【发布时间】:2021-06-18 00:37:05
【问题描述】:

我正在解决 4clojure 问题。我遇到了 #120 的这个答案,这是我自己完全不会想到的:

 (fn sum-square [coll]
  (let [digits (fn [n] (map #(- (int %) 48) (str n)))
    square #(* % %)
    sum-digits (fn [n] (reduce + (map square (digits n))))]
(count (filter #(< % (sum-digits %)) coll))))

我真正想了解的部分是它的数字部分是如何工作的。

(fn [n] (map #(- (int %) 48) (str n))

我真的很困惑

(map #(- (int %) 48) "10")

返回

(1 0)

您能解释一下这是如何工作的吗?我很困惑为什么 n 必须变成一个字符串,为什么它又变成一个整数,为什么它减去了 48。我敢肯定,我肯定错过了一些非常巧妙的技巧。

谢谢!

【问题讨论】:

    标签: clojure digits


    【解决方案1】:

    map 上下文中的“10”可以被视为字符序列(在本例中为 \1 和 \0) 然后int 将 \1 转换为 ascii 49,将 \0 转换为 ascii 48 然后- 48 将 49 转换为 1 并将 48 转换为 0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多