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を参考に書いたのだけど結構長い。もうちょっと奇麗な書き方はあるに違いない。

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

入門OCamlを読んだ

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

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

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

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

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

C#のかわりにF#を

仕事として.NETの開発をやるときに、C#はあんま気乗りがせんのう、IronPythonでやりたいなぁとつぶやいたら、

F#

という声が聞こえた。

あーF#もありか、と思ってしまったのであった。

Ocamlか。

OCamlとかErlangとか

U隊長がユッキーのためにアンパンマンのクリスマス向けDVDを借りにいくというのでお供した。といってもビデオは興味ないので併設している本屋でなんかいいもんないかなーと物色してた。 そうしたら、買おうかどうか悩んでAmazonウィッシュリストに突っ込んでおいた二冊が置いてあってびっくり。

ProductName プログラミング言語Erlang入門
柏原 正三
アスキー / ?円 ( 2007-11-29 )


こんな田舎で読むやついるのか?、近くに大学もないのに誰が一体、、、、もしや富士山麓に関数型言語を広めようという謎の黒い陰謀か?陰謀なのか?

ま、陰謀でも店員の発注ミスでもどっちでもいいけどねー、とぱらぱらとめくって、リアル中身検索。うーん、OCaml本にありがちな謎のへたうまラクダ絵のイメージとは違い、ちょっと教科書臭がしますな。Erlangのほうはというと、気になっていた並列計算の部分が最後のほうにちょろっと出ていて、まさに入門書って感じ。これだったらガウディ本読んでからもう一度検討したほうがいいかもってことで、強引に物欲を鎮めた。

また欲しくなったら再検討しよう。