Changeset 14926 for src/Pugs/Prim/List.hs
- Timestamp:
- 12/19/06 00:15:47 (2 years ago)
- Files:
-
- 1 modified
-
src/Pugs/Prim/List.hs (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Prim/List.hs
r14925 r14926 59 59 op1Pick v = retError "pick not defined" v 60 60 61 shuffle :: [a] -> Eval [a] 62 shuffle [] = return [] 63 shuffle xs = do 61 shuffleN :: Int -> [a] -> Eval [a] 62 shuffleN _ [] = return [] 63 shuffleN 0 _ = return [] 64 shuffleN n xs = do 64 65 -- pick the first element 65 66 first <- liftIO $ randomRIO (0 :: Int, length xs - 1) 66 rest <- shuffle $ take first xs ++ drop (first+1) xs67 rest <- shuffleN (n-1) $ take first xs ++ drop (first+1) xs 67 68 return $ head (drop first xs) : rest 68 69 … … 72 73 op2Pick ref num 73 74 op2Pick (VList xs) (VInt num) = do 74 shuffled <- shuffle xs75 return $ VList $ take (fromInteger num)shuffled75 shuffled <- shuffleN (fromInteger num) xs 76 return $ VList shuffled 76 77 op2Pick r _ = retError "pick not defined" r 77 78
