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." ]
这就是你想做的吗