【心得】
sum
這種常見的 function 呢?猜可能是希望大家熟悉固定幾個很好變形的 function,而不被只能做單一事情的 sum 綁死吧apply
取代 redcue
,兩者有何差異?看了這篇文章 提到只要是 association function 的情境下兩者是通用的,就像這次數字要『累加』或是下面例子的『串接』都是
(def str1 ["st1" "st2" "st3"])
;; 很怪,跟期待的字串連接不同
(str str1) => "[\"st1\" \"st2\" \"st3\"]"
;; 調整方式
(apply str str1) => "st1st2st3"
【今日湯底】
Write a program that finds the summation of every number from 1 to num. The number will always be a positive integer greater than 0.
For example:
summation(2) -> 3
1 + 2
summation(8) -> 36
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8
(必須通過以下測試)
(ns kata.test
(:require [clojure.test :refer :all]
[kata.summation :refer :all]))
(defn tester [n e]
(testing (str "Testing for " n)
(is (= (summation n) e))))
(deftest basic-tests
(tester 1 1)
(tester 8 36)
(tester 22 253)
(tester 100 5050)
(tester 213 22791))
【我的答案】
(ns kata.summation)
(defn summation [n]
"your code here"
(reduce + (range 1 (inc n)))
)
思路:
range
把給的值從 1 開始往後展開數列,但因為 range 只到給的值的前一個 ex. (range 1 3) => (1 2),所以才會再 inc
加 1【其他人的答案】
(ns kata.summation)
(defn summation [n]
"your code here"
(apply + (range (+ 1 n))))