elmでやってみるシリーズ1: ●を動かす。
import Window
pos : Signal Int
pos =let f = \tmp -> (tmp `mod` 30) - 10
in f <~ foldp (\it acc-> acc + 1) 0 (fps 50)
drawCircle : Float -> Float -> Form
drawCircle x y = move (x,y) <| filled red (circle 20)
drawMatrix : [Form]
drawMatrix = map (\x -> drawLine <| x*10) [-10..10]
drawLine : Float -> Form
drawLine x = traced (solid blue) ( segment (x,-100) (x,100) )
main : Signal Element
main=let f = \w h p-> collage w h ([drawCircle ((toFloat p)*10) 10]++drawMatrix)
in f <~ Window.width ~ Window.height ~ pos
実行する
こちらで実行できます。
感想
- foldpは好き。
- inputに対応するSignalってグローバル変数じゃね?まあ「マウスがクリックされる」とか「時間が経過する」という事実はグローバルなんだが、それによって引き起こされるイベントもそうなる…。プログラムからその値を能動的に制御できないから変数とは呼べない…のかな。でもユーザがフィールドに値を入力したり、ラジオボタンをクリックしたり、という操作によって設定項目をリアクティブに変更したその結果の、Signalである設定項目って、どう見てもグローバル変数だよね。まだよくわからない。