そういえばTsukuba.Rに行ってきたんだった
- 2008-07-28
- カテゴリ: その他のプログラミング
- タグ: R 遅延評価 関数志向
なんか興奮してHaskellとか書いてたけど、一昨日Tsukuba.Rに参加して、Rを勉強してきたんだった。そこで、syou6162先生に教わったsapply()を使ってfizzbuzzを書いてみよう。
↓な感じ。
fizzbuzz <- function(x, y) { sapply(x:y, function(n) { ifelse(n %% 15, ifelse(n %% 3, ifelse(n %% 5, n, "Buzz"), "Fizz"), "FizzBuzz") }) }
sapply()を使ったから、for文が消えて少しRっぽくなった気がするけど、いまいち芸がない。もう少し工夫ができそう。
ifelse()って遅延評価?
このコードを書いてて一つ気がついた。ifelse()って遅延評価してるんじゃね?ってこと。
試みに、↓のコードを実行してみる。
ifelse(TRUE, print(TRUE), print(FALSE))
↓結果
[1] TRUE [1] TRUE
やはり、FALSEが出力されていないということは、print(FALSE)
は評価されていない。
遅延評価かどうかを調べるために↓のようなコードを実行してみる。
hello <- function(x) { print("hello") } hello(print("world"))
↓結果
[1] "hello"
おぉぉぉ、print("world")
が評価されていない。
ってことは、
hello <- function(x) { print("hello"); x } hello(print("world"))
↓結果
[1] "hello" [1] "world"
おぉぉぉぉぉぉ、関数内でxが評価されるタイミングで、print("world")
が評価されている!Rは遅延評価の言語だったのか!
まとめ
- Rは遅延評価ができる言語でした。
- Tsukuba.Rは勉強になりました。
- 次回のTsukuba.Rまでには発表できるレベルになりたいと思いました。
- syou6162先生は相変わらずイケメンでした。
- 初めて見たhayamizはdndnでした。
追記
↓こんな記事出てたのか><
R言語と遅延評価 - (Blog ’(Yasuto . Takenaka))
Rは引数の変数に適用されるみたいです。もちろん、変数がよばれたときに評価をするようにできてる。遅延評価と言えば、tarai関数ですね。ということで tarai関数を試してみる。
スポンサーサイト
関連記事
トラックバック URL
- http://liosk.blog103.fc2.com/tb.php/135-cc9804a6