課題とかでschemeとかやらされた。
方言多すぎて情報探しづらい...(д
とりあえず課題は「ストップウォッチをグラフィカルに実装する」だそうだ。
と、いうことで、どうにか探し出した情報とか。
とりあえず前提はmzschemeで。
drschemeもいけるのかな?
とりあえず時刻の類。
これがないとストップウォッチ作れへん。
srfiとかなんとかという仕様(?)みたいなのが色々あるようで、その19番に時間関係があるらしい。
とりあえず現在時刻取得とか。
(require (lib "time.ss" "srfi/19")) ; 現在時刻を取得する。 (define time (current-time)) ; timeから秒、ナノ秒を取得する。 ; 秒は1970年からの経過秒と思われ。 ; あとナノ秒は0〜999,999,999を返す、とか書いてあるのだがなんか7桁までしか出ない。なぜ? (time-second time) (time-nanosecond time) ; あと差分が取れる (time-difference time1 time2) ; あとdateってのもある。 (define date (current-date)) ; 中身は年 月 日 時 分 秒 ナノ秒。あとzone-offsetってのも入ってるけど、これなんだろ。JSTとかあぁいうのかな?。興味ないので検索せず。 ; それぞれ(date-ちょめちょめ )でアクセスできる (date-year date) (date-month date) ; などなど。なぜかdateにはdifferenceがない。なんでだよ。 ; date->stringとか便利そうなのも発見。 ; 第に引数にフォーマットを渡せるらしい。 (date->string date "~Y/~m/~d(~a) ~H:~M:~S") ; schemeのformat系はチルダが基本なのか...。慣れないな。
こんな感じか?
まぁ、実際に使ったんは(current-time)と(time-second),(time-nanosecond)だけだがな。
GUIに関して。
これも課題の仕様にグラフィカル、とか書かれてたんで...(д
(require (lib "graphics.ss" "graphics")) (open-graphics) ; まずこれやらんといけんらしい。 ; 100x100でタイトルが"hoge"なウィンドウを作る。 ; ビューポートとかいうらしい。 (define vp (open-viewport "hoge" 100 100)) ; で線とか引くときは ((draw-line vp) (make-posn 0 0) (make-posn 100 100)) ; と言う感じで。 ; draw-なんたら系はビューポートを受け取ってlambdaを返すらしい。 ; draw-line :: Viewport -> (Posn -> Posn -> IO ()) ; って感じかな?Haskell適に言うと。 ; あと字を書いたり、四角を書いたり。 ((draw-string vp) (make-posn 10 10) "hoge") ((draw-solid-rectangle vp) (make-posn 0 0) 100 100 "white") ; solidにしてやらんと塗りつぶされないようだ。 ; キー入力関係 ; (get-key-press)と(ready-key-press)の両方があるらしい。 ; 前者はブロッキング、後者はノンブロッキングなキー入力判別。 ; readyのほうはキー入力がなければ#fが返ってくるのでまずチェックをすること。 (letrec ((key-press (ready-key-press))) (cond ((equal? key-press #f) (print "no keys pressed")) ((equal? (key-value key-press) #\a) (print "key 'a' pressed")))) ; こんなカンジ。コンパイラ通してないからtypoしてたらスマンよ。 ; letrecは局所変数の定義らしい。 ; で、まずkey-pressが#fかどうかのチェック。 ; その後(key-value)を使って「どのキーが押されているか」を取得。 ; #\aならaのキー。スペースなら#\spaceと比較すればok ; readyのほうを使うときはループの中で使わないと非実用的〜。
こんだけ調べるのに結構時間かかった。
mzschemeの情報欲しいのにgaucheばっか引っかかりやがる。
方言多すぎじゃ!!激氣。
あとmzschemeはインタプリタが使いづらい。
rlwrap必須〜。