Factorに入門する(6) 簡単なスクリプトを書いてみる
帆も櫂もないFactor入門第6回。前回深みにはまったparsing wordsのことはひとまず忘れます。
ここまで、対話環境であるlistenerで遊んでいるだけだったのですが、ここで簡単なスクリプトを書いてみました。題材はどう書く? orgから17歳教。生年月日を入力すると、17歳とXヶ月X日と表示するスクリプトです。
エラー処理皆無。"Factorらしい"書き方とか全然できていなさそうですが。
USING: kernel math.parser calendar math io ; IN: age17code : duration>monthsInInteger ( duration -- x ) duration>months >integer ; : getDaysPart ( duration -- x ) dup duration>monthsInInteger months time- duration>days >integer ; : whenAge17 ( timestamp -- timepstamp ) 17 years time+ ; : age17duration ( timestamp -- duration ) whenAge17 now swap time- ; : age17and ( timestamp -- months days ) age17duration dup duration>monthsInInteger swap getDaysPart ; "生まれた年は? (西暦で): " write flush readln string>number "生まれた月は?: " write flush readln string>number "生まれた日は?: " write flush readln string>number <date> age17and ! stack: months days swap number>string "あなたは17歳と" write write "ヶ月" write number>string write "日です" print
書いてみての発見。
- 対話環境だと読み込まれているvocaburaryでもスクリプトには宣言しないとダメ。USING: kernel ;も必要なのか!
- word定義するときには、IN:しておかないとダメ。へー。
- write/printは、flushしとかないと実行途中では出てこない。
- 時間の加算は+じゃなくてtime+