iT邦幫忙

2022 iThome 鐵人賽

DAY 2
0
Modern Web

clojure 刷刷鍋系列 第 2

Clojure 肉片 -第 2 塊

  • 分享至 

  • xImage
  •  

【學習】

  1. 判斷是否為正數有 pos? function
  2. 發現很多人的 solution 都會採用 -> / ->> 的處理方式,看起來 data 處理上比較有拆分階段 pipeline 的好處吧,明天開始也想用 threading 跟沒有的兩種寫法試試

【今日湯底】

You get an array of numbers, return the sum of all of the positives ones.

Example [1,-4,7,12] => 1 + 7 + 12 = 20

算出傳入值當中正數部分的加總

(必須通過以下測試)

(ns kata.test
  (:require [clojure.test :refer :all]
            [kata         :refer [positive-sum]]))

(deftest basic-tests
  (is (= (positive-sum [ ])           0))         
  (is (= (positive-sum [1 2 3 4 5])  15))
  (is (= (positive-sum [1 -2 3 4 5]) 13))
  (is (= (positive-sum [-1 2 3 4 -5]) 9))
  (is (= (positive-sum [-1 -2 -3 -4 -5]) 0)))

【我的答案】

(ns kata)
(defn positive-sum [xs]
  (reduce + (filter #(> % 0) xs))
  )

思路:

  1. 想先篩選出正數,找到了 filter function,知道第一個參數是想篩選的條件,想到之前用過匿名函式的寫法,可以將 coll 丟進去一個個比較是否 number > 0
  2. 因為 filter evaluate 後會 return “lazy sequence”(算是 list),所以可以透過 reduce 把 list 結構內的 data 進行加總

【其他人的答案】

(ns kata)

(defn positive-sum
  [coll]
  (->> coll
       (filter pos?)
       (reduce +)))

上一篇
Clojure 肉片 -第 1 塊
下一篇
Clojure 肉片 -第 3 塊
系列文
clojure 刷刷鍋30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言