次のAPLの式が何を計算しているかわかったあなたは...
もう、APLにはまっている!
http://homepage3.nifty.com/ysaigusa/jp/apl/guide/index.html
いや。はまってはいないのですが、だいたいは分かるので Squeak Smalltalk に意訳して動きを見てみるテスト。
| D U M Y G | D := #(1997 12 8). U := (D first \\ 100 ~= 0 and: [D first \\ 4 = 0]) or: [D first \\ 400 = 0]. U := U ifTrue: [1] ifFalse:[0]. M := {0. 31. 28 + U. 31. 30. 31. 30. 31. 31. 30. 31. 30}. M := (1 to: M size) collect: [:idx | (M first: idx) sum]. Y := D first - 1. U := {Y. Y. Y} // #(4 100 400). G := (M at: D second) + D third + (365 * Y) + U first + U third - U second. G "=> 729366 "
一つ目の U はしかたがないとして、M と二つ目の U がちょっと残念なことに。
DateAndTime オブジェクト同士の演算機能を使って素直に書けば、こんなふうでしょうか。
| origin | origin := (Date year: 1 month: 1 day: 1) - 1 day. ('12-8-1997' asDate - origin) days "=> 729366 "