Windows7でローカルにタスクをインポートする方法
Windows7でタスクをインポートしようとした時に「ユーザー資格情報がローカル コンピューターでは使用できません」というエラーが出て、どうにもこうにも進まなかったときに以下のリンクを見つけた。
「/Uと/P」ではなく「/RUと/RP」を使えってことらしい
キナバル山
2012/06/24〜2012/06/27の間マレーシアのキナバル山に行ってきました。30歳になる前に海外の山を登りたいと思っていてまとまった休みが取れたので登りに行きました。
送信者 2012/06/24〜2012/06/28 Mt.Kinabalu |
送信者 2012/06/24〜2012/06/28 Mt.Kinabalu |
送信者 2012/06/24〜2012/06/28 Mt.Kinabalu |
コタ・キナバル
下山後はコタ・キナバルの町中を散歩していました。イスラム教の国なのでトイレにトイレットペーパーがなく水が出るホースと水が入ったバケツだけでした。
送信者 2012/06/24〜2012/06/28 Mt.Kinabalu |
今回の旅行では登山の事以外にも色々と学ぶことが多かったのでこれから思い出してメモを残そうとしています。ノートを忘れたのは痛かった。旅行するときは電子機器使えないこともあるから紙のノートとペンは必須だと感じました。
2012/06/24〜2012/06/28 Mt.Kinabalu |
Project Euler 3問目
3問目もRで解いてみた。Rの乱数周りの扱いがまだ良く分からないので、もっと速くてきれいなコードがあると思うのですが、一応問題が解けるので良しとします。
prime_factorize <- function(n) { d <- 1 x <- y <- 2 while (d == 1) { rx <- runif(1, min=2, max=n) x <- floor(rx) ry <- runif(1, min=2, max=n) y <- floor(ry) d <- gcd(abs(x-y), n) } d } prime_factor_list <- function(n) { prime_factors <- NULL repeat { pn <- prime_factorize(n) prime_factors <- append(prime_factors, pn) if (pn == n) break n <- n/pn } prime_factors } answer <- function() cat("answer:", max(prime_factor_list(600851475143)), "\n")
引数の評価についての認識間違い
前回(id:eji:20120619)の遅延ストリームを使った解答に若干修正を加えました。
stream.end <- function(msg) { msg == "eos" } stream.make <- function(head, tail) { function(msg) { if (msg == "eos") F else if (msg == "head") { head } else if (msg == "tail") { tail } } } stream.is_end <- function(s) { s("eos") } stream.head <- function(s) { s("head") } stream.tail <- function(s) { s("tail") } stream.take <- function(n, st) { if (n <= 0 || stream.is_end(st)) { stream.end } else { stream.make( stream.head(st), stream.take(n-1, stream.tail(st)) ) } } stream.take_while <- function(pred, st) { head <- stream.head(st) if (pred(head)) { stream.make( head, stream.take_while(pred, stream.tail(st)) ) } else { stream.end } } stream.fold <- function(fn, init, st) { if (stream.is_end(st)) init else { stream.fold( fn, fn(init, stream.head(st)), stream.tail(st) ) } } stream.sum <- function(stream) { stream.fold( function(a, b) { a + b }, 0, stream ) } stream.filter <- function(pred, st) { head <- stream.head(st) tail <- stream.tail(st) if (stream.is_end(st)) st else if (pred(head)) { stream.make( head, stream.filter(pred, tail) ) } else { stream.filter(pred, tail) } } stream.fib <- (function() { fibgen <- function(a, b) { stream.make( a, fibgen(b, a+b) ) } fibgen(1, 2) })() even <- function(n) { (n %% 2) == 0 } answer <- stream.sum( stream.take_while( function(n) { n < 4000000 }, stream.filter(even, stream.fib) ) ) cat("answer:", answer, "\n")
遅延評価のためにクロージャで包んでいたストリームの残りを、クロージャで包まないようにしました。Rでは渡された実引数が必要になった時に初めて評価されるため、わざわざクロージャで包んで評価を遅らせる必要がないようです。
例えば、Schemeのような正格評価の言語の場合、以下のようなコードでは第2引数に渡された値は(順番はどうあれ)評価されてしまいます。
; scheme > (define (func a b) a) func > (func 3 (display "hoge\n")) hoge 3 >
しかし、Rの場合は引数の値が全く利用されなければ評価されません。
# R > func <- function(a, b) a > func(3, cat("hoge\n")) 3 >
RはHaskellと同じように非正格評価の言語なのかな...?
Rの勉強
最近Rをちょいとかじり始めたので、練習がてら Project Euler の問題を解いてみた
Problem2
フィボナッチの遅延ストリームを使って問題を解いてみた。Rにマクロのようなものが見当たらなかったので、クロージャで代用した。
stream.end <- function(msg) { msg == "eos" } stream.make <- function(head, tail) { function(msg) { if (msg == "eos") F else if (msg == "head") head else if (msg == "tail") tail() } } stream.is_end <- function(s) { s("eos") } stream.head <- function(s) { s("head") } stream.tail <- function(s) { s("tail") } stream.take <- function(n, st) { if (n <= 0 || stream.is_end(st)) { stream.end } else { stream.make( stream.head(st), function() { stream.take(n-1, stream.tail(st)) } ) } } stream.take_while <- function(pred, st) { head <- stream.head(st) if (pred(head)) { stream.make( head, function() { stream.take_while(pred, stream.tail(st)) } ) } else { stream.end } } stream.fold <- function(fn, init, st) { if (stream.is_end(st)) init else { stream.fold( fn, fn(init, stream.head(st)), stream.tail(st) ) } } stream.sum <- function(stream) { stream.fold( function(a, b) { a + b }, 0, stream ) } stream.filter <- function(pred, st) { head <- stream.head(st) tail <- stream.tail(st) if (stream.is_end(st)) st else if (pred(head)) { stream.make( head, function() { stream.filter(pred, tail) } ) } else { stream.filter(pred, tail) } } stream.fib <- (function() { fibgen <- function(a, b) { stream.make( a, function() { fibgen(b, a+b) } ) } fibgen(1, 2) })() even <- function(n) { (n %% 2) == 0 } answer <- stream.sum( stream.take_while( function(n) { n < 4000000 }, stream.filter(even, stream.fib) ) )
Vyattaにgccを入れる方法
http://www.vyatta.org/forum/viewtopic.php?p=38906#38906:ここを参考にした。
vyatta@vyatta:~$ configure
[edit]
vyatta@vyatta:~# set system package repository debian url http://debian.osuosl.org/debian
[edit]
vyatta@vyatta:~a# set system package repository debian distribution squeeze #現時点で最新の安定版がsqueeze
[edit]
vyatta@vyatta:~# set system package repository debian components main
[edit]
vyatta@vyatta:~# commit
[その他] 早起き再開
中学の頃から大学卒業くらいまで良くやっていた4時起きを再開した。
最近は日の出が早いので、4時でも結構明るい。
写真は散歩途中の立川駅前。
送信者 2011/06/07 - 立川 |
若干慣れないので午後になると眠くなるが、夏場は朝涼しいのでたまにやりたい。