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 | |
} | |
} |