99 problemについて
途中からだいぶ数学チックになってきた。
ちょっと飛ばそう。
あとコードが汚い気がする。
Q31,素数か判定する関数の答え
let is_prime = n => { let n = abs(n); let rec is_not_divisor = d => d * d > n || n mod d != 0 && is_not_divisor(d + 1); n != 1 && is_not_divisor(2); };
これわかりにくいよね。
d * d > nが満たされたらtrueが返る。
d * d > nが満たされる前にn mod d != 0がfalseになったら終了。(&&だから右が評価されなくなる)
改良
let is_prime2 = n => { let rec aux = (n, k) => switch (k) { | 1 => true | _ => n mod k != 0 && aux(n, k - 1) }; aux(n, n - 1); }; //k=1 true //k>1 「nが2..kで割り切れない」 =「nがkで割り切れない」&&「nが2..k-1で割り切れない」