Ninety-Nine Scala Problems (P35)

S-99を解く。

素因数分解

class IntWrapper(n:scala.Int) {
 def isPrime(n:Int): Boolean = (n != 1) &&
   (List.range(2,math.sqrt(n).toInt+1) forall (i => n % i != 0))
 def sieve(s: Stream[Int]): Stream[Int] =
   Stream.cons(s.head, sieve(s.tail filter (_ % s.head != 0)))

 val ps = sieve(Stream.from(2))
 def primeFactors: List[Int] = {
   def primeFactorsR(n: Int, ps: Stream[Int]): List[Int] =
     if (isPrime(n)) List(n)
     else if (n % ps.head == 0) ps.head :: primeFactorsR(n / ps.head, ps)
     else primeFactorsR(n, ps.tail)
   primeFactorsR(n, ps)
 }
}

implicit def int2IntWrapper(n:scala.Int) = new IntWrapper(n)

println("s35: " + 315.primeFactors)

エラトステネスの篩はここを参考にした。

Streamを使うと

def sieve(s: Stream[Int]): Stream[Int] =
   Stream.cons(s.head, sieve(s.tail filter (_ % s.head != 0)))

val ps = sieve(Stream.from(2))

とHaskellのように書ける

ProductName Scalaスケーラブルプログラミング第2版
Martin Odersky
インプレスジャパン / 4830円 ( 2011-09-27 )


ヤキットリアに行ってきた

同期の送別会と称して、前から気になっていたyakittoria inahoさんへ行ってきた。

気になっているといいつつ、大人の事情で一人だけノンアルコールという屈辱。次の日早朝から会議がなければよかったのにと。まぁ、ノンアルコールも充実しているので良し。

1317460126 1317460128

メニューが窓に。野菜が美味い

1317460132 1317460130

魚は真鯛だそうです。そして、自家製ジンジャーエールに移行。

1317460134 1317460137

1317460139 1317460141

焼き鳥は全部で10種で結構なボリューム。塩梅はちょっと気になったけど、酒飲んでたら このくらいのがちょうどいいんだろうなぁと、隣で金明とか白隠正宗をうまそうに飲んでいる 同僚を見ながら思った。

1317460143 1317460145

抹茶ティラミスで締めた。

1317460147

満足の夜だった(日本酒を飲めなかったのを除いては)

まぁ、同期は研究離れちゃったけど、新しいとこで頑張ってくださいと。

ScalaでSwing

GUIアプリを作るのにSwingを使ってみる

scala_swing

結構簡単そう。

import scala.swing._

object FirstSwingApp extends SimpleSwingApplication {
  def top = new MainFrame {
    title = "First Swing App"
    contents = new Button {
      text = "Click me"
    }
  }
}

ProductName Scalaスケーラブルプログラミング第2版
Martin Odersky
インプレスジャパン / 4830円 ( 2011-09-27 )


今日の畑(111001)

ニンニクを植えつけたのと、ほうれん草の種をまいた。もう少し葉物を植えてもいいかもしれない。

人参の目が出てきたけど、人参って発芽率が低いよね。

1317543683

浅葱は去年植えたのが増えたので、今年は結構取れそう。去年は畝に植えて、春に他のものを植えられなくて困ったたので、今回は畑の端の方にうつしておいた。

1317543691 1317543700

先々週に植えたスティックセニョール。育て方がよくわからん。

1317543706

花陽浴 純米吟醸

爽やかフルーティー系、旨いというよりは美味い。

1317459760

音的にはNetskyか。

ProductName Netsky
Netsky
Hospital / ?円 ( 2010-06-01 )


Ninety-Nine Scala Problems (P33-P34)

S-99を解く。互いに素かどうか判定する問題と、それをつかってオイラーのφ関数を求める

class IntWrapper(n:scala.Int){
  def gcd(a:scala.Int, b:scala.Int): scala.Int =  if (b == 0) a else gcd(b, a % b)
  def isCoprimeTo(i:scala.Int): Boolean = gcd(n,i) == 1
  def totient: scala.Int = (1 to n) filter {(new IntWrapper(n)).isCoprimeTo(_)} length
}

implicit def int2IntWrapper(n:scala.Int) = new IntWrapper(n)

println("s33: " + 35.isCoprimeTo(64))
println("s34: " + 10.totient)

ProductName Scalaスケーラブルプログラミング第2版
Martin Odersky
インプレスジャパン / 4830円 ( 2011-09-27 )


PBPKのこと

今日のPBPKのセミナーはおもしろかったけどつまらなかった。

おもしろかった部分はまぁどうでもいいとして、つまらなかった部分を書いとくが、例えるならば、セミエンピリカルな分子軌道法を肯定してる的な。

今日の発表の全てからab initio的な理論計算の至高が感じられなかった。

PBPKにフィッテイング許したらそれは論理コンパートメントモデルと同じレベルに堕ちちゃうじゃん、堕落じゃねーの?と。自分でPBPKモデリングをやったときに、実測のlogDとかcLogPとかけ離れたパラメータを投入しないと、実測のPKに合わなくて、非常に気持ち悪いと感じていたのだけど、どこもそんな感じでやっていた。

理論計算やっているひとから見ると非常に気持ち悪いですね、そもそもチョイスしたモデルがダメなんじゃねーの?みたいな。

結局そういうダメなモデルをフィッテイングで合わせるんだったらin vitroのデータ必要ないじゃんとか思うんだけど。QSPRと整合性の取れないモデルってことは結局in vitroとin vivoの関係性を捕まえてないってことだしなぁ。

そこを肯定しちゃうと前進なんてしないんじゃないかなぁ。in vivoを排除するからこそのPBPKだ!みたいな気概が感じられなかった、プラクティカルでイイじゃんみたいな。

ProductName Pharmacokinetic-Pharmacodynamic Modeling and Simulation
Peter L. Bonate
Springer / 10339円 ( 2011-06-30 )


Structure-PBPK relationshipは遠いなと思った。

デリーのコルマカレー

東大でセミナーだったので久々にデリーへ。

1317381519

コルマの酸味がヤバイ、カシミールは辛さに耐えて終わってしまうが、コルマは深さを味わえる。

1317381516

Ninety-Nine Scala Problems (P32)

S-99を解く。GCD実装するだけ、楽勝とおもったらへんなとこではまった。

対話環境では動く

scala> def gcd(a:Int, b:Int): Int =  if (b == 0) a else gcd(b, a % b)
gcd: (a: Int, b: Int)Int

scala> gcd(36,63)
res0: Int = 9

でも、スクリプトにして呼ぶとvalue % is not a member of Intっていうエラー

$ scala p32.scala 
/Users/kzfm/scala/p32.scala:2: error: value % is not a member of Int
def gcd(a:Int, b:Int): Int =  if (b == 0) a else gcd(b, a % b)

/Users/kzfm/scala/p32.scala:4: error: type mismatch;
 found   : scala.Int(36)
 required: Int
println(gcd(36, 63))

scala.Intって何?ってことで型の定義を変更したら動いた

def gcd(a:scala.Int, b:scala.Int): scala.Int =  if (b == 0) a else gcd(b, a % b)

println(gcd(36, 63))

よくわからん。

ProductName Scalaスケーラブルプログラミング第2版
Martin Odersky
インプレスジャパン / 4830円 ( 2011-09-27 )