gpt4 book ai didi

haskell - 从 Haskell 列表中抽取任意数量的数字

转载 作者:行者123 更新时间:2023-12-04 04:46:25 25 4
gpt4 key购买 nike

我开始从 Ruby 背景学习 Haskell。我希望能够从列表中获取任意数量的项目:

sample [1,2,3,4,5,6,7,8,9,10]
=> 7
sample 3 [1,2,3,4,5,6,7,8,9,10]
=> [4,2,9]

这在 Ruby 中可用,我希望获得相同的功能。我在谷歌上搜索后找不到它,所以我想我会在这里问。这是可用的还是我必须自己实现的功能?谢谢!

最佳答案

基于 http://ruby-doc.org/core-2.0/Array.html 处的代码对于在数组中选择 n 个随机索引的示例,我想出了以下内容:

import System.Random
import Data.List
import Control.Applicative

sample1 xs = do
let l = length xs - 1
idx <- randomRIO (0, l)
return $ xs !! idx

sample 0 xs = return []
sample n xs = do
let l = min n (length xs)
val <- sample1 xs
(:) <$> (pure val) <*> (sample (l-1) (delete val xs))

或者,您可以使用 Control.Monad而不是 Control.ApplicativeliftM2 (:) (return val) (sample (ct-1) (delete val xs))
使用 delete确实会产生 Eq但是,限制列表元素的类型,因此如果需要避免这种情况,则必须在索引处拆分/合并。

关于haskell - 从 Haskell 列表中抽取任意数量的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18105937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com