clojure - Clojure 中的平方和

标签 clojure lisp

我必须对 Clojure 语言做一个简短的演示,其中我还必须提供简单任务的解决方案:输入一个整数 n 并输出总和:1+2^2+3^2 +...+n^2。使用输入验证使 n 为正数。

我以前的 Lisp 方言或 Java 经验为零,我发现这很有挑战性。我离这还有多远? (猜测很多):

(defn sum_of_squares [n]
(if (> n 0)
    (def sum 0)
    (dotimes [n]
        (+ sum (* n n)))))

正如你所见,我不知道发生了什么。我实际上应该如何提示用户输入 n 的值,然后输入 println 总和?另外,整个 (+ sum (* n n) 表达式应该在哪里存储其结果,并在此过程中更新 sum?

也许有很多更简单的方法来解决这个问题,所以请随意告诉我:)。

最佳答案

这是一个简单的功能解决方案:

(defn sum-of-squares [n] 
  (reduce + (map #(* % %) (range 1 (inc n)))))

从内到外阅读,看看它是如何工作的:

  • 取从 1 到 n 的范围(使用 (inc n) 作为上限,因为您想包含 n 本身)
  • map 一个函数#(* % %),它只是一个对其参数进行平方的匿名函数。这具有对序列中所有数字进行平方的效果。
  • 减少使用+的序列 - 即将所有方 block 加在一起以获得结果。

关于clojure - Clojure 中的平方和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14776319/

相关文章:

clojure - 在 Clojure 中对向量实现双循环的惯用方法是什么?

scala - 在 Haskell 中编写时间函数

clojure - 将多个参数展开为关键字

lisp - 基本 LISP 问题

lisp - lisp代码的解释

Clojure & ClojureScript : clojure. core/read-string, clojure.edn/read-string 和 cljs.reader/read-string

java - 在 LWJGL 中启用照明时,面部呈黑色/深色

emacs - 我如何最好地在 elisp 中使用 common-lisp(如果有的话)?

emacs - 如何在 elisp 中用变量替换硬编码字符串?

ruby - 如何编写解释器?