Cách dễ nhất là sử dụng mô-đun System.Random
, trong gói ngẫu nhiên, vì vậy bạn có thể phải cài đặt trước.
mô-đun này định nghĩa để typeclasses:
class RandomGen g where
next :: g -> (Int,g)
-- ...
class Random r where
random :: RandomGen g => g -> (a,g)
randomR :: RandomGen g => (r,r) -> g -> (a, g)
Các typeclass, bạn phải thực hiện là ngẫu nhiên, cụ thể chức năng đầu tiên (tùy theo từng thứ hai chẳng có ý nghĩa, bạn chỉ có thể thực hiện như randomR = const random
gì random
.? Bạn nhận được một máy phát ngẫu nhiên làm đầu vào, bạn phải tạo ra những gì bạn cần cho nó, và cung cấp cho trình tạo mới trở lại
Để tạo ra các giá trị ngẫu nhiên, bạn có thể sử dụng đơn vị State
hoặc như sau:
random g = (myResult,gn) where
(random1,g1) = next g
(random2,g2) = next g2
-- ...
Sau đó bạn có thể sử dụng hệ thống máy phát điện ngẫu nhiên bằng chức năng này:
randomIO :: Random r => IO r
Nó được xác định trước và mang lại một giá trị khác nhau mỗi cuộc gọi.
Tuy nhiên, cuối cùng bạn phải tự quyết định cách xác định Ví dụ ngẫu nhiên của mình.
Cảm ơn phản hồi siêu nhanh, nhưng ý của bạn là gì bởi <$>? – SirLenz0rlot
Ah, đó là từ 'Control.Applicative' - chỉ một số cú pháp đơn giản có nghĩa là bạn có thể áp dụng một hàm cho một giá trị ngẫu nhiên. – Dario
Nó chỉ là 'fmap' – fuz