def reverse[A](xs: List[A]): List[A] = {
(List.empty[A] /: xs){(x, y) => y :: x}
}
の方が読みやすい?
でも右畳込みの場合, この書き方だとWindowsでバックスラッシュが円記号になるから,直感的じゃなくなるんだよな…
| /** | |
| * http://projecteuler.net/problem=4 | |
| * http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%204 | |
| */ | |
| val xs = List.range(999, 99, - 1) | |
| val ys = List.range(999, 99, - 1) | |
| val isPalindromicNumber = (n: Int) => { | |
| n.toString == n.toString.reverse | |
| } |
| /** | |
| * http://projecteuler.net/problem=3 | |
| * http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%203 | |
| */ | |
| def maxPrime(i: Long, k: Long): Long = { | |
| if (i > k) { | |
| if (i % k == 0) { | |
| maxPrime(i / k , k) | |
| } else { | |
| maxPrime(i, k + 1) |
| /** | |
| * http://projecteuler.net/problem=1 | |
| * http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%201 | |
| */ | |
| sum $ filter (\x -> mod x 3 == 0 || mod x 5 == 0) [1 .. 999] |
| /* | |
| * http://projecteuler.net/problem=2 | |
| * http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%202 | |
| */ | |
| val fib: List[Int] => List[Int] = {xs => | |
| xs match { | |
| case Nil => throw new IllegalArgumentException | |
| case i::Nil => throw new IllegalArgumentException | |
| case _ => { | |
| val nextNum = xs.head + xs.tail.head |
| /** | |
| * http://projecteuler.net/problem=1 | |
| * http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%201 | |
| */ | |
| (1 to 999) filter(i => i % 3 == 0 || i % 5 == 0) sum |
def reverse[A](xs: List[A]): List[A] = {
(List.empty[A] /: xs){(x, y) => y :: x}
}
の方が読みやすい?
でも右畳込みの場合, この書き方だとWindowsでバックスラッシュが円記号になるから,直感的じゃなくなるんだよな…
| /** | |
| * 『すごいHaskell』で実装例が出ていたコラッツ数列をScalaで実装 | |
| * | |
| * https://gist.github.com/3986524 が末尾再帰になってないので | |
| * なおしてみた. | |
| * | |
| * コラッツ数列とは: | |
| * ・任意の自然数から開始する. | |
| * ・数が1ならば,終了. | |
| * ・数が偶数ならば,2で割る. |
| /** | |
| * 『すごいHaskell』で実装例が出ていたコラッツ数列をScalaで実装 | |
| * | |
| * コラッツ数列とは: | |
| * ・任意の自然数から開始する | |
| * ・数が1ならば、終了 | |
| * ・数が偶数ならば、2で割る | |
| * ・数が奇数ならが、3倍して1を足す | |
| * ・新しい値でこのアルゴリズムを繰り返す | |
| * |
##gistでmarkdownを書くテスト
val tmp = if (i == 0) {
"hello"
} else {
"bye"
}
| object jojo extends App { | |
| def isPrime(n: Int) = { | |
| if (n < 2) { | |
| false | |
| } else { | |
| (2 to n - 1).exists(n % _ == 0) == false | |
| } | |
| } |