Random 如何使用随机数的映射函数
此代码来自。我做了一个小改动,见下文Random 如何使用随机数的映射函数,random,elm,Random,Elm,此代码来自。我做了一个小改动,见下文 import Mouse import Window import Random main : Signal Element main = lift2 scene Window.dimensions clickLocations -- for a good time, remove "sampleOn Mouse.clicks" ;) clickLocations : Signal [(Int,Int)] clickLocations = foldp (
import Mouse
import Window
import Random
main : Signal Element
main = lift2 scene Window.dimensions clickLocations
-- for a good time, remove "sampleOn Mouse.clicks" ;)
clickLocations : Signal [(Int,Int)]
clickLocations = foldp (::) [] (sampleOn Mouse.clicks Mouse.position)
scene : (Int,Int) -> [(Int,Int)] -> Element
scene (w,h) locs =
let p = Random.float (fps 25)
drawPentagon p (x,y) =
ngon 5 20 |> filled (hsla p 0.9 0.6 0.7)
|> move (toFloat x - toFloat w / 2, toFloat h / 2 - toFloat y)
|> rotate (toFloat x)
in layers [ collage w h (map (drawPentagon <~ p) locs) // I want to change different color each time, error here!
, plainText "Click to stamp a pentagon." ]
导入鼠标
导入窗口
随机输入
主:信号元件
main=lift2场景窗口。尺寸单击位置
--要玩得开心,请移除“sampleOn Mouse.clicks”;)
单击位置:信号[(Int,Int)]
clickLocations=foldp(:)[](在Mouse.clicks Mouse.position上采样)
场景:(Int,Int)->[(Int,Int)]->元素
场景(w、h)locs=
设p=Random.float(fps 25)
图p(x,y)=
ngon 5 20 |>填充(hsla p 0.9 0.6 0.7)
|>移动(托福乐x-托福乐w/2,托福乐h/2-托福乐y)
|>旋转(toFloat x)
在图层中[拼贴w h(地图(DrawPentagan在您的代码中,您有DrawPentagan表单)
map的类型是map:(a->b)->[a]->[b]
,这是导致类型错误的原因。基本上说,map
需要一个函数a->b
,但您给了它一个信号((Int,Int)->From)
一种尝试和完成您正在做的事情的方法是将p
设置为scene
的一个参数,并使用lift3
传入Random.float(fps 25)
。因此,您将得到以下结果:
import Mouse
import Window
import Random
main : Signal Element
main = lift3 scene Window.dimensions clickLocations (Random.float (fps 25))
-- for a good time, remove "sampleOn Mouse.clicks" ;)
clickLocations : Signal [(Int,Int)]
clickLocations = foldp (::) [] (sampleOn Mouse.clicks Mouse.position)
scene : (Int,Int) -> [(Int,Int)] -> Float -> Element
scene (w,h) locs p =
let drawPentagon p (x,y) =
ngon 5 20 |> filled (hsla p 0.9 0.6 0.7)
|> move (toFloat x - toFloat w / 2, toFloat h / 2 - toFloat y)
|> rotate (toFloat x)
in layers [ collage w h (map (drawPentagon p) locs)
, plainText "Click to stamp a pentagon." ]
这就是你想做的吗