ocamlとocamlcとload

例えば、こんな感じでloadして、

#load "unix.cma";;

let file = "/Users/kzfm/OCaml/kaeru.ml"

let () =
  let proc = Unix.open_process_in ("wc -l < " ^ file) in
  let count = input_line proc in
  ignore (Unix.close_process_in proc);
  print_string count;;

実行すると

$ ocaml wc.ml
      28

一方、コンパイルしようとすると

$ ocamlc unix.cma wc.ml
File "wc.ml", line 1, characters 0-1:
Error: Syntax error

エラーがでるが、#loadという行を除くときちんとコンパイルできる。

コンパイルしたい場合は毎度#loadっていう行を削除しないといけないのかな。

IT化という名前の情報の流れの組み替え

そうそう、結局重要なのは業務フローを見直して如何に効率的にまわすかとか組織全体の情報の流れを美しくするかとかで、ITってのはそれを補助するためにあるだけなんだよなとか思う。

システム化再考/mark-wada blog

ITを導入することが、システム化したことになると安易に言ってはいけないように思う。業務システムは、別にITがなくても昔からあったわけで、それは仕事の仕組みだとか流れ、また組織そのものがシステムであると言える。

で、ありがちなのは、上のほうの偉い系のヒトはITを導入するだけで情報の効率化が推進されてハッピーうさちゃんだとか本気で信じてたりする。で、IT化する僕らのほうも、そこらへんの期待は汲んでいるので、システム化する際に、よく考えてフローを見直して業務(ぼくらだと研究業務)がうまく流れてみんなハッピーになれるよう変更するわけだ。

ただ、現場は慣性っつうか惰性でそういうフローの見直しにはすぐに感情的になって反対してくるので、まぁ現場のメリット感を演出するような小技も入れたりしてまぁなんとか形にするんだけどね。

今日のOCaml

文法事項 -OCaml-より

let rec fact = function
      0 -> 1
    | n -> n * fact (n-1);;

これは、

let rec fact' =
  (fun x -> match x with
    0 -> 1
  | n -> n * fact' (n-1));;

さて、Objective Caml入門

同じ名前の関数を宣言することで隠すのが,Objective Camlプログラミングの常套テクニックとして使われる.

とあって、

# let rec fact (n, res) = if n = 1 then res else fact (n - 1, res * n);;
val fact : int * int -> int = <fun>
# let fact n = fact (n, 1);;
val fact : int -> int = <fun>

あーc++のオーバーロードみたいなもんか?と思ったんだけどどうも違うらしい。

# let f (x,y) = x + y;;
val f : int * int -> int = <fun>
# let f x y = x +. y;;
val f : float -> float -> float = <fun>

こんなのは動かない。

OCamlとlambda

後者は構文糖衣?

# let f = fun x -> x * x
val f : int -> int = <fun>
# let g x = x * x;;
val g : int -> int = <fun>

ここまでやれる

# ( * ) 4 4;;

Common Lispだとこうかな

(setq f (lambda (x) (* x x)))
(funcall f 4)

(defun g (x) (* x x))
(g 4)

OCamlで日付操作

週末にもぎったインゲンを茹でて食べたらめちゃうまだった。本には種まきしてから40-50日で収穫と書いてあったので、あれ、そういえば種まきしてから何日経ったかな?と調べたくなった(OCamlで)

種まきしてから40日後の日付を表示する。

#load "unix.cma";;
open Unix

let days = [| "Sun"; "Mon"; "Tue"; "Wed"; "Thu"; "Fri"; "Sat" |]
let months = [| "Jan"; "Feb"; "Mar"; "Apr"; "May"; "Jun";
                "Jul"; "Aug"; "Sep"; "Oct"; "Nov"; "Dec" |]

let format_time time =
  let tm = localtime time in
  Printf.sprintf "%s %s %2d %02d:%02d:%02d %04d"
    days.(tm.tm_wday)
    months.(tm.tm_mon)
    tm.tm_mday
    tm.tm_hour
    tm.tm_min
    tm.tm_sec
    (tm.tm_year + 1900)

let epoch_seconds date =
  Scanf.sscanf date "%04d-%02d-%02d"
    (fun yyyy mm dd ->
      fst (mktime {tm_sec=0; tm_min=0; tm_hour=0;
                        tm_mday=dd; tm_mon=mm-1; tm_year=yyyy-1900;
                        tm_wday=0; tm_yday=0; tm_isdst=false}));;

let date = epoch_seconds "2009-05-23";;
let interval = 40. *. 60. *. 60. *. 24.;;
let then' = date +. interval

let () =
  Printf.printf "harvest date is %s\n" (format_time then');

さてどうかな?

#   harvest date is Thu Jul  2 00:00:00 2009

pleacを参考に書いたのだけど結構長い。もうちょっと奇麗な書き方はあるに違いない。

それにしてもいんげんは今週中に収穫しないと固くなりそうだな。

フッ素の役割

昨日、ワークショップで雑談してて、メディシナルケミストリーにおけるフッ素の役割がとか。

ハロゲンのくせに、Cl,Brとはちょっと違うよねとか。

ProductName Bioorganic and Medicinal Chemistry of Fluorine
Jean-Pierre Bégué
Wiley-Interscience / 11185円 ( 2008-05-27 )


「ムナーリの機械」を読んだ

想像力をカキタテラレルかな?

ProductName ムナーリの機械
ブルーノ・ムナーリ
河出書房新社 / ¥ 3,045 ()
在庫あり。

あんま、現実的な解ばかり追い求めなくてもいいかなぁと思うのであった。

Pharmacokinetics and Metabolism in Drug Design

DMPK,TKを考慮したドラッグデザインの際に考慮することなど。

多分メディシナルケミスト向けなんだろうなと思うんだが、コンパクトにまとまっているので、chemoinformaticsのヒトが読んでも参考になることが多い。

ProductName Pharmacokinetics and Metabolism in Drug Design (Methods and Principles in Medicinal Chemistry)
Dennis A. Smith,Han van de Waterbeemd,Don K. Walker
Wiley-VCH / ¥ 12,813 ()
在庫あり。

  • 2.11 Slow offset compounds
    • フレキシブルな化合物はassociation-disassociationが素早くおこる可能性がある
  • 3.6 Estimation of Absorption Potential
    • AP =logP + logFnon + logS(So . Vl/Xo)
  • Distribution and Tmax

薄いわりにはちとお高めだが、投資と思い割り切った(今回は)。

今日の畑

雑草がヤバいことになっていて、昨日、今日で草取りを3時間以上やった。

ミニトマトを収穫。娘がすぐにもぎって食べてしまうので、制止して撮影(既に一つ食べられた)。

1246782966

つるなしいんげんも収穫。いんげんってもぎるときに若干粘着力を感じるのね。

1246782971

ゴーヤは握りこぶしサイズなのでもう少し。

1246782975

ProductName はじめての野菜づくり12か月
板木 利隆
家の光協会 / ¥ 2,100 ()
在庫あり。

他にシシトウ、二十日大根、紫蘇の葉を収穫して終了。

入門OCamlを読んだ

型の章と、標準ライブラリの章がお役立ち

ProductName 入門OCaml ~プログラミング基礎と実践理解~
OCaml-Nagoya
毎日コミュニケーションズ / ¥ 2,625 ()
在庫あり。

7章、8章あたりの実践的な内容、というかクックブック的なものがもう少し欲しい気もした。

というわけで、色々探してみた。

最後のPLEACPerlと対比させながら覚えていけばよいのでよさげ。