もともとBASICの世界から来たので関数型プログラミングには不慣れでしたが、最近 map, filter, reduce などの便利な機能を覚えたので頻用するようになりました。
以前、
問題: 0から100未満の偶数の和を求めよ。
という投稿がありました。
本投稿では、「偶数」を「素数」に置き換えて
問題: 1から100未満の素数の和を求めよ。
という例題をforを使わずに解いてみました。(swift 4)
let a = (2 ..< 100).filter{$0 % 2 != 0 || $0 == 2}.filter{$0 % 3 != 0 || $0 == 3}.filter{$0 % 5 != 0 || $0 == 5}.filter{$0 % 7 != 0 || $0 == 7}
let b = a.reduce(0, +)
print("\(a)の総和は\(b)")
print結果は、以下のようになります。
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]の総和は1060
う〜ん、なんかインチキくさいコードです。
1から1万未満とか1億未満の素数の和を求めようとするとお手上げです。
いつもQiitaの皆様の投稿には勉強させてもらっていますが、皆様からの改善案(厳しいツッコミ)が頂ければ幸甚です。