| Copyright | Copyright (C) 2022 Yoo Chung |
|---|---|
| License | GPL-3.0-or-later |
| Maintainer | dev@chungyc.org |
| Safe Haskell | Safe-Inferred |
| Language | GHC2021 |
Problems.P77
Description
Part of Ninety-Nine Haskell Problems. Some solutions are in Solutions.P77.
Synopsis
- randomWalkPaths :: Int -> [[Int]]
Documentation
randomWalkPaths :: Int -> [[Int]] Source #
A list is also a monad.
For example, dupli in P14
could have been implemented with the list monad:
>>>:{let dupli xs = do x <- xs [x, x] in dupli [1, 2, 3] :} [1,1,2,2,3,3]
Using the list monad, implement a function which returns all the one-dimensional random walk paths with \(n\) steps. Starting from position 0, each step can change positions by -1, 0, or 1. Each path will be a list of positions starting from 0.
Examples
>>>randomWalkPaths 0[[0]]
>>>sort $ randomWalkPaths 2[[0,-1,-2],[0,-1,-1],[0,-1,0],[0,0,-1],[0,0,0],[0,0,1],[0,1,0],[0,1,1],[0,1,2]]
Hint
The list monad can be a simple way to model non-deterministic computations. For example, if we have one number that may be either 2 or 3, and we want to multiply it by another number that may be either 5 or 6, we can get the possible results as follows:
>>>:{do x <- [2,3] :: [Int] y <- [5,6] :: [Int] return $ x*y :} [10,12,15,18]